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 <[EMAIL PROTECTED]> To: Wacek Kusnierczyk <[EMAIL PROTECTED]> Cc: R help <[EMAIL PROTECTED]> 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]]
______________________________________________ R-help@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.