[R] Unexpected result from binary greater than operator
Duncan Murdoch
murdoch at stats.uwo.ca
Tue Nov 1 17:22:00 CET 2005
On 11/1/2005 11:15 AM, chris.bodily at autolivasp.com wrote:
> Can someone please help me understand why R returns TRUE for (4.2 - 4.1) >
> 0.1 ?
Rounding error. See the FAQ item
7.31 Why doesn't R think these numbers are equal?
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
[1] FALSE
R> a * a - 2
[1] 4.440892e-16
The function all.equal() compares two objects using a numeric tolerance
of .Machine$double.eps ^ 0.5. If you want much greater accuracy than
this you will need to consider error propagation carefully.
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://docs.sun.com/source/806-3568/ncg_goldberg.html
Duncan Murdoch
More information about the R-help
mailing list