Hi Kenn, Well I think your use or round isn't optimal solution. If you using
round(x,1)-round(x,1) you create 2 problems First: error propagation because you make 2 round. Second: you don't using "guard digits" approach. The optimal use of round is using in last calculation: Look this > round(8.8,1)-round(7.8,1)>1 [1] TRUE > round(8.8-7.8,1)>1 [1] FALSE > round(8.8-7.8,1)==1 [1] TRUE Bernardo Rangel Tura, M.D,MPH,Ph.D National Institute of Cardiology Brazil ---------- Original Message ----------- From: "Kenn Konstabel" <[EMAIL PROTECTED]> To: "emma jane" <[EMAIL PROTECTED]> Cc: R help <[EMAIL PROTECTED]> Sent: Thu, 11 Dec 2008 11:53:01 +0200 Subject: Re: [R] Logical inconsistency > Rounding can do no good because.... > > round(8.8,1)-round(7.8,1)>1 > # still TRUE > round(8.8)-round(7.7)>1 > # FALSE > > What you might do is compute a-b-1 and compare it to a very small number: > > (8.8-7.8-1) < 1e-10 > # TRUE > > K > > On Wed, Dec 10, 2008 at 11:47 AM, emma jane <[EMAIL PROTECTED]> > wrote: > > > Thanks Greg, that does make sense. And I've solved the problem by > > rounding the variables before taking the difference between them. > > > > Thanks to all who replied. > > > > Emma Jane > > > > > > > > > > ________________________________ > > From: Greg Snow <[EMAIL PROTECTED]> > > > > .com.br>; Wacek Kusnierczyk <[EMAIL PROTECTED]>; Chuck > > Cleland <[EMAIL PROTECTED]> > > Cc: R help <[EMAIL PROTECTED]> > > Sent: Tuesday, 9 December, 2008 16:30:08 > > Subject: RE: [R] Logical inconsistency > > > > Some (possibly all) of those numbers cannot be represented exactly, so > > there is a chance of round off error whenever you do some arithmetic, > > sometimes the errors cancel out, sometimes they don't. Consider: > > > > > print(8.3-7.3, digits=20) > > [1] 1.000000000000001 > > > print(11.3-10.3, digits=20) > > [1] 1 > > > > So in the first case the rounding error gives a value that is slightly > > greater than 1, so the greater than test returns true (if you round the > > result before comparing to 1, then it will return false). In the second > > case the uncertainties cancelled out so that you get exactly 1 which is not > > greater than 1 an so the comparison returns false. > > > > Hope this helps, > > > > -- > > Gregory (Greg) L. Snow Ph.D. > > Statistical Data Center > > Intermountain Healthcare > > [EMAIL PROTECTED] > > 801.408.8111 > > > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > > > project.org] On Behalf Of emma jane > > > Sent: Tuesday, December 09, 2008 7:02 AM > > > To: Bernardo Rangel Tura; Wacek Kusnierczyk; Chuck Cleland > > > Cc: R help > > > Subject: Re: [R] Logical inconsistency > > > > > > 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- > > > th > > > > > ink-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]] > > > > > > > > [[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. > > > > > > [[alternative HTML version deleted]] ------- End of Original Message ------- ______________________________________________ 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.