|[ < ]||[ > ]||[ << ]||[ Up ]||[ >> ]||[Top]||[Contents]||[Index]||[ ? ]|
The only numbers that can be represented exactly in R's numeric type are integers and fractions whose denominator is a power of 2. Other numbers have to be rounded to (typically) 53 binary digits accuracy. As a result, two floating point numbers will not reliably be equal unless they have been computed by the same algorithm, and not always even then. For example
R> a <- sqrt(2) R> a * a == 2  FALSE R> a * a - 2  4.440892e-16
all.equal() compares two objects using a numeric
.Machine$double.eps ^ 0.5. If you want much greater
accuracy than this you will need to consider error propagation
For more information, see e.g. David Goldberg (1991), "What Every Computer Scientist Should Know About Floating-Point Arithmetic", ACM Computing Surveys, 23/1, 5-48, also available via http://www.validlab.com/goldberg/paper.pdf.
To quote from "The Elements of Programming Style" by Kernighan and Plauger:
10.0 times 0.1 is hardly ever 1.0.
This document was generated by root on April, 26 2012 using texi2html 1.76.