wrong answer for simple expressions
On Thu, 2004-11-11 at 12:24 -0500, Drew Hoysak wrote:
I am experiencing strange (to me) output when trying to do simple calculations. Expressions that should equal zero yield non-zero values. Examples:
a <- 4.1-3.1 b <- 5.1-4.1 a-b
[1] -4.440892e-16
(4.1-3.1)-(5.1-4.1)
[1] -4.440892e-16 When this last expression is expanded, I get the right answer:
4.1-3.1-5.1+4.1
[1] 0 I am using the binary packaged version R-2.0.0-0.fdr.1.fc2.i386.rpm for Linux Fedora Core 2. I had the same problem with version 1.9.0-0
Can anyone tell me what is going on?
A lack of understanding as to how floating point numbers are represented by computers under the IEEE 754 floating point standard. Hint: Take note of the following:
print(0.1, digits = 20)
[1] 0.10000000000000000555
print(4.1, digits = 20)
[1] 4.0999999999999996447
print(4.1 - 3.1, digits = 20)
[1] 0.99999999999999955591
print(4.1 - 3.1 - 5.1, digits = 20)
[1] -4.0999999999999996447 Read the last FAQ "Why is 0.1 not 0.1?" here: http://grouper.ieee.org/groups/754/faq.html#binary-decimal and read David Goldberg's article, "What Every Computer Scientist Should Know about Floating-Point Arithmetic", which is available here: http://grouper.ieee.org/groups/754/ in a Postscript file or here in an edited form in HTML: http://docs.sun.com/source/806-3568/ncg_goldberg.html HTH, Marc Schwartz