diff --git a/Testing/float.c b/Testing/float.c index 9df23ac97..6f803bfc3 100644 --- a/Testing/float.c +++ b/Testing/float.c @@ -1,24 +1,73 @@ #include +#define FACTOR (1 << 30) +/* #define FACTOR 1e8 */ + int main() { - int i = 0; - double d = 0.123456789; + int i1, i2, i3; + unsigned u2, u3 = 0; + volatile double d = 0.123456789; + volatile double di; +#if 0 printf ("%f %d\n", d, i); d = frexp (d, &i); + printf ("%f %d\n", d, i); d = ldexp (d, i); printf("%f\n", d); - printf ("%f %d\n", d, i); - d = frexp (d, &i); +#elif 1 - printf ("%f %d\n", d, i); - d = frexp (d, &i); + i1 = i2 = i3 = 0; + d = -0.123456789; + printf ("encoded value = %.15g\n", d); + d = frexp (d, &i1); + printf ("%g %d %d %d\n", d, i1, i2, i3); + d *= FACTOR; + i2 = d; + d -= i2; + printf ("%g %d %d %d\n", d, i1, i2, i3); + d *= FACTOR; + i3 = d; + d -= i3; + printf ("%g %d %d %d\n", d, i1, i2, i3); - printf ("%f %d\n", d, i); - d = frexp (d, &i); + d = 0; + d = i3; + d /= FACTOR; + d += i2; + d /= FACTOR; + d = ldexp (d, i1); + printf ("decoded value = %.15g\n", d); + +#else + + d = 0.123456789; + printf ("original value = %g\n", d); + + d = frexp (d, &i1); + d *= FACTOR; + d = modf (d, &di); + u2 = di; + if (d != 0) + { + d *= FACTOR; + d = modf (d, &di); + u3 = di; + } + printf ("%d %u %u\n", i1, u2, u3); + + d = 0; + d = u3; + d /= FACTOR; + d += u2; + d /= FACTOR; + d = ldexp (d, i1); + printf ("decoded value = %g\n", d); + +#endif exit (0); }