Esempio n. 1
0
int main(void) {
  int i;
  double v1 = 0;
  float v2 = 0;
  float res[3];
  if (!efac_init()) {
    printf("init failed!\n");
    return 1;
  }
  efac_clear(0);
  for (i = 1; i < 100000000; i+=PER_LOOP) {
#if PER_LOOP == 1
    float f = 1.0 / i;
    v1 += f;
    v2 += f;
    efac_add(0, f);
#elif PER_LOOP == 4
    efac_add4(0, 1.0 / (i + 0), 1.0 / (i + 1), 1.0 / (i + 2), 1.0 / (i + 3));
#else
#error unsupported PER_LOOP value
#endif
//  printf("vals: %f %f %f\n", v1, v2, efac_read(0));
  }
  res[0] = efac_read_round_nearest(0);
  res[1] = efac_read_round_inf(0);
  res[2] = efac_read_round_zero(0);
  printf("vals: %.18e %e %.18e %.18e %.18e\n", v1, v2, res[0], res[1], res[2]);
  printf("vals: %.18e %e %.18e\n", (float)v1, v2, efac_read(0));
  printf("vals: %x %x %x\n", flt2int(res[0]), flt2int(res[1]), flt2int(res[2]));
  return 0;
}
Esempio n. 2
0
void listline(char *var, statement *stmt, byte showline)
{
  int x;

  outcount = 0;

  if (stmt->errorflag) {
    mysprintf(var, "*ERR ");
    for (x=0; x<tokenpos; x++) mysprintf(var, " ");
    mysprintf(var, "V\n");
  }
  if (showline) mysprintf(var, "%.5d ", stmt->linenum);
  if (stmt->errorflag) {
    mysprintf(var, "%s", stmt->metalist[1].stringarg);
    return;
  }
  if (stmt->numlabels) {
    for (x=0; x<stmt->numlabels; x++)         
      mysprintf(var, "%s: ", get_labelname(stmt->labelset[x]->labelnum));
  } 
  mysprintf(var, "%s ", get_opname(stmt->opcode));
  switch(stmt->opcode) {
    case CMD_DEFFN:
      list_deffn(var, stmt);
      break;
    case CMD_REM:
      mysprintf(var, "%s", stmt->metalist[1].stringarg);
      break;
    case CMD_IF:
      list_if(var, stmt);
      break;
    case CMD_LET:
      list_let(var, stmt);
      break;
    case CMD_SETESC:
    case CMD_SETERR:
    case CMD_GOTO:
    case CMD_GOSUB:
      if (stmt->metalist[1].operation == LABELREF)
        mysprintf(var, "%s", get_labelname(stmt->metalist[1].shortarg));
      else mysprintf(var, "%.5d", stmt->metalist[1].shortarg);
      break;
    case CMD_FOR:
      list_for(var, stmt);
      break;
    case CMD_NEXT:
      mysprintf(var, "%s", get_symname(stmt->metalist[1].shortarg));
      break;
    case CMD_LIST:
    case CMD_DELETE:          
      if (stmt->metapos == 1)  
        mysprintf(var, "00001, 65534");
      else if (stmt->metapos == 2)
        mysprintf(var, "%.5d", flt2int(stmt->metalist[1].floatarg));
      else mysprintf(var, "%.5d, %.5d", flt2int(stmt->metalist[1].floatarg),
                                flt2int(stmt->metalist[3].floatarg));
      break;
    case CMD_RETURN:
    case CMD_WEND:
    case CMD_RETRY:
    case CMD_SETERRON:
    case CMD_SETERROFF:
      break;
    case CMD_ON:
      list_on(var, stmt);
      break;
    default:
      if (stmt->metapos == 1) break;
      simplifylist(var, stmt, 0, stmt->metapos);
      mysprintf(var, "%s", listpop());
      break;
  }
}