From savicky at cs.cas.cz  Mon Apr 18 19:25:36 2011
From: savicky at cs.cas.cz (Petr Savicky)
Date: Mon, 18 Apr 2011 19:25:36 +0200
Subject: [Rd] Dangerous Bug with IF function of R
In-Reply-To: <1303143161471-3457976.post@n4.nabble.com>
References: <1303143161471-3457976.post@n4.nabble.com>
Message-ID: <20110418172536.GB11313@cs.cas.cz>

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.



[Rd] Dangerous Bug with IF function of R
Petr Savicky