Dear R-users, May be there is something that I am not understanding, missed or else... Why do these operations yield these results? > 25%/%0.2 [1] 124 > 25%%0.2 [1] 0.2 I would expect (although I know that what I do expect and what is really intended in the code may be different things) > 25/0.2 [1] 125 > 25 - floor(25/0.25)*0.25 [1] 0 (At least this second one is what I would expect from the code in arithmetic.c, lines 168 to 178) -- --------------------------------------- Jos? M. Blanco-Moreno Dept. de Biologia Vegetal (Bot?nica) Facultat de Biologia Universitat de Barcelona Av. Diagonal 645 08028 Barcelona SPAIN --------------------------------------- phone: (+34) 934 039 863 fax: (+34) 934 112 842
2010/9/9 "Jos? M. Blanco Moreno" <jmblanco at ub.edu>:> ?Dear R-users, > May be there is something that I am not understanding, missed or else... > Why do these operations yield these results? >> 25%/%0.2 > [1] 124 >> 25%%0.2 > [1] 0.2 > > I would expect (although I know that what I do expect and what is really > intended in the code may be different things) >> 25/0.2 > [1] 125 >> 25 - floor(25/0.25)*0.25 > [1] 0 > > (At least this second one is what I would expect from the code in > arithmetic.c, lines 168 to 178)Did you read the documentation before you read the code? ?%%? and ?x %/% y? can be used for non-integer ?y?, e.g. ?1 %/% 0.2?, but the results are subject to rounding error and so may be platform-dependent. Because the IEC 60059 representation of ?0.2? is a binary fraction slightly larger than ?0.2?, the answer to ?1 %/% 0.2? should be ?4? but most platforms give ?5?. I suspect that is relevant to your interests.... Barry
On 09/09/2010 7:56 AM, Barry Rowlingson wrote:> 2010/9/9 "Jos? M. Blanco Moreno" <jmblanco at ub.edu>: >> Dear R-users, >> May be there is something that I am not understanding, missed or else... >> Why do these operations yield these results? >>> 25%/%0.2 >> [1] 124 >>> 25%%0.2 >> [1] 0.2 >> >> I would expect (although I know that what I do expect and what is really >> intended in the code may be different things) >>> 25/0.2 >> [1] 125 >>> 25 - floor(25/0.25)*0.25 >> [1] 0 >> >> (At least this second one is what I would expect from the code in >> arithmetic.c, lines 168 to 178) > > Did you read the documentation before you read the code? > > ?%%? and ?x %/% y? can be used for non-integer ?y?, e.g. ?1 %/% > 0.2?, but the results are subject to rounding error and so may be > platform-dependent. Because the IEC 60059 representation of ?0.2? > is a binary fraction slightly larger than ?0.2?, the answer to ?1 > %/% 0.2? should be ?4? but most platforms give ?5?. > > I suspect that is relevant to your interests.... >Yes. I think Jos? is assuming that 25 %/% 0.2 and floor(25/0.2) are equal, but they are not, because rounding affects them differently. (The first is a single operation with no rounding except in the representation of 0.2; the second is two operations and is subject to another set of rounding.) Duncan Murdoch