From p.dalgaard at biostat.ku.dk  Tue May 30 15:05:07 2006
From: p.dalgaard at biostat.ku.dk (Peter Dalgaard)
Date: 30 May 2006 15:05:07 +0200
Subject: [Rd] Numerical error in R (win32) (PR#8909)
In-Reply-To: <002c01c683e6$6bfc6e60$f9bec69b@ltpfujitsu>
References: <002c01c683e6$6bfc6e60$f9bec69b@ltpfujitsu>
Message-ID: <x2odxfacjg.fsf@viggo.kubism.ku.dk>

"ltp" <teck.lim at imperial.ac.uk> writes:

> Hi
> 
> 	Thanks for the quick reply. However, I am not satisfied, as
> > round(3.15000000, 1)
> [1] 3.1
> > round(3.75000000, 1)
> [1] 3.8
> 
> 	I think the problem is really more of an error in the rounding off
> algorithm than finite precision.

It isn't, and adding zeros doesn't change anything. The issue is that
3.15 has a nonterminating binary expansion, just like 1/7 has a
nonterminating decimal one. Please do read the references that have
already been provided to you.
 
3.15 (dec) == 11.0010011001100110011... (bin)
3.75 (dec) == 11.11 (bin)

> Thanks
> Teckpor
> 
> -----Original Message-----
> From: pd at pubhealth.ku.dk [mailto:pd at pubhealth.ku.dk] On Behalf Of Peter
> Dalgaard
> Sent: Monday, May 29, 2006 17:49
> To: teck.lim at imperial.ac.uk
> Cc: r-devel at stat.math.ethz.ch; R-bugs at biostat.ku.dk
> Subject: Re: [Rd] Numerical error in R (win32) (PR#8909)
> 
> teck.lim at imperial.ac.uk writes:
> 
> > Hi
> >     I had observed the following problem in R (also C, Matlab, and
> Python).
> > sprintf('%1.2g\n', 3.15)
> > give 3.1 instead of 3.2 whereas an input of 3.75 gives 3.8.
> > Java's System.out.printf is ok though.  
> >  
> > > round(3.75,1)
> > [1] 3.8
> > > round(3.15,1)
> > [1] 3.1
> >  
> > Similar outcome with sprintf in R.
> > 
> > 
> > However, the right answer should be 3.2
> 
> According to what? Remember that we're dealing with finite precision binary
> arithmetic here:
> 
> >  (3.15 - 3.1)<.05
> [1] TRUE
> >  abs(3.15 - 3.2)>.05
> [1] TRUE
> 
> See also FAQ 7.31.
>   
> > Regards
> > Teckpor
> > 
> 
> -- 
>    O__  ---- Peter Dalgaard             ?ster Farimagsgade 5, Entr.B
>   c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
>  (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
> ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)                  FAX: (+45) 35327907
> 
> 

-- 
   O__  ---- Peter Dalgaard             ?ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)                  FAX: (+45) 35327907



[Rd] Numerical error in R (win32) (PR#8909)
Peter Dalgaard