[Rd] Dangerous Bug with IF function of R
Petr Savicky
savicky at cs.cas.cz
Mon Apr 18 19:25:36 CEST 2011
On Mon, Apr 18, 2011 at 09:12:41AM -0700, salmajj wrote:
> hi!
> there is a bug with the IF operator that is really dangerous!
> please try the code below and if someone could explain to me why when (q is
> equal to 0.8, 0.9 or 1) R do not print it?
>
> q=0
> for (j in 1:11){
>
> if ((q==1)){
> print(q)
> }
> q=q+0.1
> }
>
> so in this code q is incremented from 0 to 1.1. but R do not capture print
> the value 1, 0.8 and 0.9 !! try to change (q==0.4) it gonna print 0.4. but
> if you put q==0.8 or 0.9 or 1 it doesn't work!!!
> please try it it is amazing!!!
Incrementing a number by 0.1 produces numbers, which are not exactly
representable in binary, so this operation involves a rounding error.
Try the following
q=0
for (j in 1:11){
if ((q==1)){
print(q)
}
q=round(q+0.1, digits=7)
}
Petr Savicky.
More information about the R-devel
mailing list