[R] Rounding error in seq(...)

Greg Snow Greg.Snow at imail.org
Wed Sep 30 21:39:32 CEST 2009


Read FAQ 7.31 (no you are not the first to notice this).

In fact this is an issue with most computer programs, not unique or original to R.  The FAQ has a link to a general computer science article that goes into great detail on this issue.

Reading that article (or something similar) should be a prerequisite to using a computer for anything more numerically involved than playing solitare.

-- 
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at imail.org
801.408.8111

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Martin Batholdy
> Sent: Wednesday, September 30, 2009 1:18 PM
> To: Duncan Murdoch
> Cc: r help
> Subject: Re: [R] Rounding error in seq(...)
> 
> hum,
> 
> can you explain that a little more detailed?
> Perhaps I miss the background knowledge - but it seems just absurd to
> me.
> 
> 0.1+0.1+0.1 is 0.3 - there is no rounding involved, is there?
> 
> why is
> x <- 0.1 + 0.1 +0.1
> not equal to
> y <- 0.3
> 
> ?
> 
> 
> 
> Am 30.09.2009 um 21:04 schrieb Duncan Murdoch:
> 
> > On 9/30/2009 2:50 PM, Michael Knudsen wrote:
> >> On Wed, Sep 30, 2009 at 8:44 PM, Duncan Murdoch
> >> <murdoch at stats.uwo.ca> wrote:
> >>> Why?  You asked for an increment of 1 in the second case (which is
> >>> exactly
> >>> represented in R), then divided by 10, so you'll get the same as
> >>> 0.3 gives
> >>> you.  In the seq() case you asked for an increment of a number
> >>> close to but
> >>> not equal to 1/10 (because 1/10 is not exactly representable in
> >>> R), so you
> >>> got something different.
> >> Well, the problem is that I don't know how seq is implemented. I
> just
> >> assumed that it wouldn't behave like this.
> >
> > It doesn't really matter how it is implemented:  if you ask to start
> > at 0.1 and increment by 0.1, you should expect the result to be the
> > same as
> >
> > 0.1
> > 0.1+0.1
> > 0.1+0.1+0.1
> > etc.
> >
> > and I think it is.  The problem is that 0.1+0.1+0.1 is not the same
> > as 0.3, due to rounding.  Neither 0.1 nor 0.3 can be represented
> > exactly in the standard IEEE floating point formats that R uses.
> >
> > Duncan Murdoch
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list