Skip to content

invalid comparison in numeric sequence (PR#13551)

4 messages · Alexandre Courtiol, Peter Dalgaard, John Nolan +1 more

#
Full_Name: alex
Version: 2.8.1
OS: Ubuntu / MacOSX
Submission from: (NULL) (162.38.183.51)
[1] TRUE
[1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE


What is wrong with 0.6 ??? (TRUE is missing)
I tried 3 differents computers (2 Ubuntu with R 2.8.1, and one Mac with R 2.8).
#
alexandre.courtiol at gmail.com wrote:
FAQ 7.31, not a bug. Expect about 10 people to tell you so.
#
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.