From: Petr Savicky <savicky_at_cs.cas.cz>

Date: Wed, 25 Feb 2009 18:08:25 +0100

R-devel_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed 25 Feb 2009 - 16:10:57 GMT

Date: Wed, 25 Feb 2009 18:08:25 +0100

*> > seq(0,1,0.1)==0.4
***> [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
**

If you know that all the numbers in a sequence should have a given decimal precision, then you obtain a better result using round(,digits=...). For example,

x <- round(seq(0,1,0.1), digits=1)

rbind(x == 0.4, x == 0.6, x ==0.8)

produces

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]

[1,] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE [2,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE

This does not mean, that x[7] is now equal to 0.6, however both x[7] and 0.6 are represented by the same 53-bit floating point number

formatC(x[7], digits=20) # "0.5999999999999999778" formatC(0.6, digits=20) # "0.5999999999999999778"

Petr.

R-devel_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed 25 Feb 2009 - 16:10:57 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Wed 25 Feb 2009 - 19:31:38 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel.
Please read the posting
guide before posting to the list.
*