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