mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 08:26:27 +00:00
(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
This commit is contained in:
parent
06183fce8e
commit
e33d2b2595
1 changed files with 57 additions and 8 deletions
|
@ -1,24 +1,73 @@
|
|||
#include <math.h>
|
||||
|
||||
#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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue