mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-25 17:51:01 +00:00
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@1287 72102866-910b-0410-8b05-ffd578937521
73 lines
1.1 KiB
C
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);
|
|
}
|