libs-base/Testing/float.c
Andrew McCallum e33d2b2595 (main): New code doesn't look precision.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@1287 72102866-910b-0410-8b05-ffd578937521
1996-03-29 16:00:16 +00:00

73 lines
1.1 KiB
C

#include <math.h>
#define FACTOR (1 << 30)
/* #define FACTOR 1e8 */
int main()
{
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);
#elif 1
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);
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);
}