Many thanks for your help, perhaps I should have set my query in context .... !

I'm simply calculating an indicator variable [0,1] based on the whether the difference between two measured variables is > 1 or <=1.

I understand the FAQ about floating point arithmetic, but am still puzzled that it only apparently applies to certain elements, as follows:

8.8 - 7.8 > 1
> TRUE

8.3 - 7.3 > 1
> TRUE
 
However,
 
10.2 - 9.2 > 1
>FALSE
 
11.3 - 10.3>1
> FALSE

Emma Jane




________________________________
From: Bernardo Rangel Tura <tura@centroin.com.br>
To: Wacek Kusnierczyk <Waclaw.Marcin.Kusnierczyk@idi.ntnu.no>
Cc: R help <R-help@stat.math.ethz.ch>
Sent: Saturday, 6 December, 2008 10:00:48
Subject: Re: [R] Logical inconsistency

On Fri, 2008-12-05 at 14:18 +0100, Wacek Kusnierczyk wrote:
> Berwin A Turlach wrote:
> > Dear Emma,
> >
> > On Fri, 5 Dec 2008 04:23:53 -0800 (PST)

> >  
> >  
> >> Please could someone kindly explain the following inconsistencies
> >> I've discovered__when performing logical calculations in R:
> >>
> >> 8.8 - 7.8 > 1
> >>    
> >>> TRUE
> >>>      
> >> 8.3 - 7.3 > 1
> >>    
> >>> TRUE
> >>>      
> >
> > Gladly:  FAQ 7.31
> > http://cran.at.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f
> >
> >  
> 
> well, this answer the question only partially.  this explains why a
> system with finite precision arithmetic, such as r, will fail to be
> logically correct in certain cases.  it does not explain why r, a
> language said to isolate a user from the underlying implementational
> choices, would have to fail this way. 
> 
> there is, in principle, no problem in having a high-level language
> perform the computation in a logically consistent way.  for example, bc
> is an "arbitrary precision calculator language", and has no problem with
> examples as the above:
> 
> bc <<< "8.8 - 7.8 > 1"
> # 0, meaning 'no'
> 
> bc <<< "8.3 - 7.3 > 1"
> # 0, meaning 'no'
> 
> bc <<< "8.8 - 7.8 == 1"
> # 1, meaning 'yes'
> 
> 
> the fact that r (and many others, including matlab and sage, perhaps not
> mathematica) does not perform logically here is a consequence of its
> implementation of floating point arithmetic. 
> 
> the faq you were pointed to, and its referring to the goldberg's
> article, show that r does not successfully isolate a user from details
> of the lower-level implementation.
> 
> vQ

Well, first of all for 8.-7.3 is not equal to 1 [for computers]

> 8.3-7.3-1
[1] 8.881784e-16

But if you use only one digit precision 

> round(8.3-7.3,1)-1
[1] 0
> round(8.3-7.3,1)-1>0
[1] FALSE
> round(8.3-7.3,1)==1
[1] TRUE


So the problem is the code write and no the software

-- 
Bernardo Rangel Tura, M.D,MPH,Ph.D
National Institute of Cardiology
Brazil


      
	[[alternative HTML version deleted]]

