[Rd] Critical Bug in type conversions: as.integer, trunc, (PR#8255)

Marc Schwartz MSchwartz at mn.rr.com
Thu Oct 27 15:41:03 CEST 2005


On Thu, 2005-10-27 at 15:24 +0200, g.toedt at dkfz.de wrote:
> Full_Name: Grischa Tödt
> Version: 2.1.1
> OS: windows XP
> Submission from: (NULL) (192.108.25.32)
> 
> 
> I have a strange behaviour in R, looks like type conversions are messed up.
> 
> To reproduce:
> 
> expected:
> > typeof(3)
> [1] "double"
> 
> > as.integer(3)
> [1] 3
> 
> !!!! strange:
> > typeof((0.3/0.1))
> [1] "double"

> > as.integer((0.3/0.1))
> [1] 2
> 
> also for trunc:
> >trunc(c(5,7))
> >c(0.5,0.7)/c(0.1,0.1)
> 
> and now watch the amazing!!!!:
> >trunc((c(0.5,0.7)/c(0.1,0.1)))


> trunc((c(0.5,0.7)/c(0.1,0.1)))
[1] 5 6


You are getting bitten (you know where) by floating point representation
issues here:

> print(0.3 / 0.1, digits = 20)
[1] 2.9999999999999995559

> print(0.7 / 0.1, digits = 20)
[1] 6.9999999999999991118

So as.integer() and trunc() is working as intended, since in both cases,
they truncate towards 0.


Bottom line:

NOTABUG


Read R FAQ 7.31 and the reference cited there for more information.

HTH,

Marc Schwartz



More information about the R-devel mailing list