[R] Is this correct?

Duncan Murdoch murdoch at stats.uwo.ca
Tue Oct 11 12:44:48 CEST 2005


Joe wrote:
> Dear userR,
> 
> With the following results, are they correct or acceptable?

Yes.  See the FAQ:

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.

> 
> 
>>x <- c(1.4, 1.2, 2.8)
>>sum(x)
> 
> [1] 5.4
> 
>>sum(x) == 5.4
> 
> [1] FALSE
> 
>>(1.4 + 1.2 + 2.8) - 5.4
> 
> [1] -8.881784e-16
> 
>>(1.4 + 1.2) - 2.6
> 
> [1] -4.440892e-16
> 
>>2.6 - 1.5 - 1.1
> 
> [1] 0
> 
> 
>>version
> 
>          _
> platform i386-pc-mingw32
> arch     i386
> os       mingw32
> system   i386, mingw32
> status
> major    2
> minor    2.0
> year     2005
> month    10
> day      06
> svn rev  35749
> language R
> 
> What can I do to correct them if they are not correct?
> Thanks!
> --
> C. Joseph Lu
> Department of Statistics
> National Cheng-Kung University
> Tainan, Taiwan, ROC
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html




More information about the R-help mailing list