Re: floating point inconsistency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Andrew Haley wrote:
That is strange.  A bit of debugging would be required to understand
why that happens.

#include <stdio.h>
#include <math.h>

double length = 0.00106722283403500495;
double angle = 0.60066412215710574;

void dump(double d)
{
 unsigned char *c = (unsigned char *)&d;
 int i;
 for (i = 0; i < 8; i++, c++) printf("%2.2x", *c);
 printf("\n");
}

void calc(void)
{
 double sincos1, sincos2;

 asm volatile("fldl %2\n"
              "fsincos\n"
              "fstpl %0\n"
              "fstpl %1"
              : "=m" (sincos1), "=m" (sincos2) : "m" (angle));

 dump(sincos1);
 dump(cos(angle));
}

int main()
{
   calc();
   return 0;
}

I compile the above with gcc 4.1.2 (redhat) or 4.3.2 (debian)
(it gives the same result).

On an AMD (opteron as it seems):
/users/cro> ./a.out 75d882701366ea3f
75d882701366ea3f

On an intel (so do I think):
/users/cro> ./a.out 76d882701366ea3f
75d882701366ea3f

The least significant bit differs.

If that may help...
Cédric

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux