[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Spock@SAMSON.CADR.DIALNET.SYMBOLICS.COM: Floating-point round-off problems.]
Date: Fri, 11 Aug 89 07:28 PDT
From: Spock@SAMSON.CADR.DIALNET.SYMBOLICS.COM (Mr. Spock)
Date: Thu, 10 Aug 89 17:16 CDT
From: dmitchell@backus.trc.amoco.com (Donald H. Mitchell)
Date: Thu, 10 Aug 89 13:40:52 CDT
From: mac%cadillac.cad.mcc.com@mcc.com (Mac Michaels)
+> Date: Thu, 10 Aug 89 08:00 PDT
+> From: Spock@SAMSON.CADR.DIALNET.SYMBOLICS.COM (Mr. Spock)
+>
+> Does anyone have a hack to correct for the losing floating-point math on
+> these Symbolics machines?
+>
+> Consider:
+>
+> (- 6 5.9) returns -> 0.099999905 instead of 0.1
+>
+> Thanks,
+> --Mark Alexander
It looks like a problem common to more than Symbolics.
Austin Kyoto Common Lisp on a Sun 4-110 returns:
0.09999999999999964
Extension Language Kit (a superset of Scheme) on a Sun 3 returns:
0.0999999999999996
USPS: Mac Michaels, 3500 W.Balcones Center Dr., Austin,TX 78759
ARPA: mac@mcc.com
UUCP: {uunet,harvard,gatech,pyramid}!cs.utexas.edu!milano!cadillac!mac
Oh my GOD! Look what happens with Sun's C:
Gag, barf!
Float: 0.099999904632568;
double: 0.09999999999999964472863211995;
immediate: 0.09999999999999964472863211995
It must be a conspiracy! Who's stealing our floating points!!??
Yes it must. The russians?
Here's the source, see if you can figure it out!
#include <stdio.h>
main()
{ float a,b;
double c,d;
a = 6.0;
c = 6.0;
d = 5.9;
b = 5.9;
a = a - b;
c = c - d;
printf ( "\n\nFloat: %19.14g; double: %32.29g; immediate: %32.29g\n\n",
a , c,
(6.0 - 5.9));
}
Thank-you one and all for your gentle rebufs concerning my naive
question. I'll be chuckling over Mitchell's response all day.
--Mark Alexander
For some more background, you could read the documentation section
"Floating-Point Numbers" from volume 2A. Especially the section entitled
"Non-mathematical Behavior of Floating-point Numbers".