[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