From MSchwartz at mn.rr.com  Thu Oct 27 15:41:03 2005
From: MSchwartz at mn.rr.com (Marc Schwartz)
Date: Thu, 27 Oct 2005 08:41:03 -0500
Subject: [Rd] Critical Bug in type conversions: as.integer, trunc,
	(PR#8255)
In-Reply-To: <20051027132431.7DC9022150@slim.kubism.ku.dk>
References: <20051027132431.7DC9022150@slim.kubism.ku.dk>
Message-ID: <1130420463.4196.37.camel@localhost.localdomain>

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



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