raimon.massanet at upc.edu
2009-Nov-11 12:15 UTC
[Rd] Unexpected behaviour of seq(from,to,by) (PR#14057)
Full_Name: Raimon Massanet Version: 2.9.2 OS: Linux Ubuntu 8.10 Submission from: (NULL) (147.83.71.76) # Hi there. # I'm not sure whether or not this is a bug. # But it surely is an unexpected behaviour. V <- seq(from=0,to=1,by=0.1) # Should generate a sequence with a step of 0.1 V==0 # [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE # Ok! V==0.1 # [1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE # Ok! V==0.6 # [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE # None? V[7] # [1] 0.6 V[7]==0.6 # [1] FALSE # Rounding!? V[8] # [1] 0.7 V[8]==0.7 # [1] FALSE # Rounding!? V[9] # [1] 0.8 V[9]==0.8 # [1] TRUE # Back to normal # The generated sequence is fine for all values except for 0.6 # and 0.7, which appear to be somewhat off the expected value. # According to the R manual the sequence is generated in the form: # from, from+by, ..., to # which is not the case. # Either the function or the documentation lead to an unexpected # behaviour of seq(from,to,by). # Thanks!
Petr Savicky
2009-Nov-11 12:29 UTC
[Rd] Unexpected behaviour of seq(from,to,by) (PR#14057)
> # Hi there. > # I'm not sure whether or not this is a bug.No, this is not a bug. See FAQ 7.31 at http://cran.r-project.org/doc/FAQ/R-FAQ.html and the comments below.> # But it surely is an unexpected behaviour. > > V <- seq(from=0,to=1,by=0.1) > > # Should generate a sequence with a step of 0.1 > > V==0 > # [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE > # Ok! > > V==0.1 > # [1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE > # Ok! > > V==0.6 > # [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE > # None? > > V[7] > # [1] 0.6 > V[7]==0.6 > # [1] FALSE > # Rounding!?Yes. The sequence of operations, which leads to V[7], produce slightly different rounding error than the direct conversion of 0.6 to binary representation. So, we have formatC(V[7], digits=20) # [1] "0.60000000000000008882" formatC(0.6, digits=20) # [1] "0.5999999999999999778" See http://wiki.r-project.org/rwiki/doku.php?id=misc:r_accuracy for more examples and explanations. Petr Savicky.> V[8] > # [1] 0.7 > V[8]==0.7 > # [1] FALSE > # Rounding!? > > V[9] > # [1] 0.8 > V[9]==0.8 > # [1] TRUE > # Back to normal > > # The generated sequence is fine for all values except for 0.6 > # and 0.7, which appear to be somewhat off the expected value. > > # According to the R manual the sequence is generated in the form: > # from, from+by, ..., to > # which is not the case. > > # Either the function or the documentation lead to an unexpected > # behaviour of seq(from,to,by). > > # Thanks! > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >