R> round(100000/3, -2) - 33300
[1] -7.275958e-12
I would have hoped for 0. The problem seems to be specifically for negative
"digits". This is in 1.3.1 on Solaris 2.6 (full description at
bottom).
[Apologies for making everyone read this 3 times; my bug.report() burped.]
Peter Dalgaard <p.dalgaard@biostat.ku.dk> says the problem is in fround.c,
which reads in part:
pow10 = R_pow_di(10., dig)
...
return sgn * (intx + R_rint(x * pow10) / pow10);
and (says Peter),> the problem is most likely that pow10 (== 1/100) has no finite binary
> representation. Patches are welcome...
I'm not up to patching C code, but I will say that a workaround is:
R> round(round(100000/3, -2)) - 33300
[1] 0
and a smarter C-programmer could probably implement this concept:
if digits < 0, force the final result to an integer.
-- David Brahm (brahm@alum.mit.edu)
Version:
platform = sparc-sun-solaris2.6
arch = sparc
os = solaris2.6
system = sparc, solaris2.6
status =
major = 1
minor = 3.0
year = 2001
month = 06
day = 22
language = R
Search Path:
.GlobalEnv, package:misc, package:io, package:arrays, package:ls1, package:db,
package:ts, package:ctest, Autoloads, package:base
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To:
r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._