Yes, I tried out the program

#include <stdio.h>
#include <math.h>
main() {
  double x,y;
  int i;

  x = 53.278500;
  y = exp(x);
  printf("%8lf\n",x);
  for(i=0;i<sizeof(double);i++)
    printf("%x ",((unsigned char*)(&x))[i]);
  printf("\n");
  printf("%8lf\n",y);
  for(i=0;i<sizeof(double);i++)
    printf("%x ",((unsigned char*)(&y))[i]);
  printf("\n");
}

On FreeBSD and Linux I get
53.278500
cf f7 53 e3 a5 a3 4a 40 
137581029243568449912832.000000
e7 7d 89 54 48 22 bd 44 

and on Linux emulation under FreeBSD I get
53.278500
cf f7 53 e3 a5 a3 4a 40 
137581029243567812378624.000000
c1 7d 89 54 48 22 bd 44 

I don't really know the format of IEEE very well, but it looks like some
low order bits are different - the answers are really different.

I also tried the same experiment with sin and gamma - then the problem
does not occur.  Well except that the answer for gamma(53.278500) is
reported as 157.464664 which is way wrong.

When I tried it for x=52 they gave almost the same answer, only
seperated by the last bit (the decimal versions were reported as the
same).  For x=54 they both gave the same wrong answer 160.331128.

I don't know a whole lot about IEEE.  What is the largest number it is
supposed to handle?  Looking at man math it says it should handle
numbers as large as 1.8e308 - we certainly are not in that range!!!

-- 
Stephen Montgomery-Smith
[EMAIL PROTECTED]
http://www.math.missouri.edu/~stephen

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to