예제 #1
0
int
main (void)
{
#define DECIMAL_PRINTF_BUF_SIZE 65	/* ((DECIMAL128_PMAX + 14) * 2) + 1 */
  char digits[DECIMAL_PRINTF_BUF_SIZE];
  int exp;			/* the exponent */
  int is_neg;			/* is negative */
  int is_nan;			/* is not a number */
  int is_inf;			/* is infinite */
  int i;

  for (i=0; i<d32_s; ++i)
    {
      fprintf (stdout, "__get_digits_d32(%HeDF) in: %s:%d\n", d32[i].d,
	       __FILE__, __LINE__ - 1);
      memset (&digits[0], '\0', DECIMAL_PRINTF_BUF_SIZE);
      __get_digits_d32 (d32[i].d, digits + 1, &exp, &is_neg, &is_nan,
			&is_inf);
      out_digits (digits, is_neg, exp);
      _SC_P (__FILE__, d32[i].line, d32[i].expect, &digits[0]);
    }

  for (i=0; i<d64_s; ++i)
    {
      fprintf (stdout, "__get_digits_d64(%DeDD) in: %s:%d\n", d64[i].d,
	       __FILE__, __LINE__ - 1);
      __get_digits_d64 (d64[i].d, digits + 1, &exp, &is_neg, &is_nan,
			&is_inf);
      out_digits (digits, is_neg, exp);
      _SC_P (__FILE__, d64[i].line, d64[i].expect, &digits[0]);
    }

  for (i=0; i<d128_s; ++i)
    {
      fprintf (stdout, "__get_digits_d128(%DDeDL) in: %s:%d\n", d128[i].d,
	       __FILE__, __LINE__ - 1);
      __get_digits_d128 (d128[i].d, digits + 1, &exp, &is_neg, &is_nan,
			 &is_inf);
      out_digits (digits, is_neg, exp);
      _SC_P (__FILE__, d128[i].line, d128[i].expect, &digits[0]);
    }


  _REPORT ();

  /* fail comes from scaffold.c  */
  return fail;
}
예제 #2
0
void
out_fix(fix fval)
{
	register int a = (fval & 0xfff00000) >> 20, f = fval & 0xfffff, j=0;
	register int delta;

	out("R ");
	if (a>0x7ff) {
		out("-"); a = 0x1000 - a;
		if (f>0) {
			f = 0x100000 - f; a--;
		}
	}
	do {
		digits[j] = a % 10;
		j++;
		a = a / 10;
	} while (a > 0);
	out_digits(j);
	out(".");
	f = 10*f + 5; delta = 10;
	do {
		if (delta>0x100000) f = f + 0x80000 - (delta / 2);
		fprintf(file_output, "%c", (f / 0x100000) + '0');
		f = 10 * (f % 0x100000); delta = delta*10;
	} while (f>delta);
}
예제 #3
0
int main(int argc, char* argv[])
{
  struct timeval now;
  gettimeofday(&now, NULL);
  printf("%ld.", now.tv_sec);
  out_digits((int)now.tv_usec/10000);
  printf("\n");
  return 0;
}
예제 #4
0
void
out_int(unsigned val, unsigned base)
{
	register unsigned j=0, acc=val;
	if (val < 0) internal_error_1("out_int (val=%d)", val);
	if (base==16)      out("H ");
	else if (base==10) out("D ");
	else if (base==8)  out("O ");
	else internal_error_1("out_int (base=%d)", base);
	do {
		digits[j] = acc % base;
		j++;
		acc = acc / base;
	} while (acc > 0);
/*
        if ((base==16) && (ec>=0x100)) {
            while (j<4) { digits[j] = 0; j++; }
        }
*/
	out_digits(j);
}