Re: [Rd] significant digits (PR#9682)
On 6/3/08, Duncan Murdoch <[EMAIL PROTECTED]> wrote: > > because signif(0.90, digits=2) == 0.9. Those two objects are identical. My text above that is poorly worded. They're identical internally, yes. But in terms of the number of significant digits, 0.9 and 0.90 are different. And that matters when the number is printed, say as an annotation on a graph. Passing it through sprintf() or format() later requires you to specify the number of digits after the decimal, which is different than the number of significant digits, and requires case testing for numbers of different orders of magnitude. The original complainant (and I) expected this behavior from signif(), not merely rounding. As I said before, I wrote my own workaround so this is somewhat academic, but I don't think we're alone. > As far as I know, rounding is fine in Windows: > > > round(1:10 + 0.5) > [1] 2 2 4 4 6 6 8 8 10 10 > It might not be the rounding, then. (windows xp sp3) > signif(12345,digits=4) [1] 12340 > signif(0.12345,digits=4) [1] 0.1235 OS X (10.5.2/intel) does not have that problem. But (on both windows and OS X): > signif(12345.12345,digits=10) [1] 12345.12 Pat Carr __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] significant digits (PR#9682)
On 6/3/08, Duncan Murdoch <[EMAIL PROTECTED]> wrote: > > It's easy to make mistakes in this, but a little outside-of-R > experimentation suggests those are the right answers. The number 12345 is > exactly representable, so it is exactly half-way between 12340 and 12350, so > 12340 is the right answer by the unbiased round-to-even rule. The number > 0.12345 is not exactly representable, but (I think) it is represented by > something slightly closer to 0.1235 than to 0.1234. So it looks as though > Windows gets it right. Well, right within the limitations of binary floating-point arithmetic. Not right right. In the grander scheme, this is a nicety which is largely inconsequential--if I need a real measure precision (precise precision?) I'll use a +/- notation of a propagated error and/or edit the typography of the numbers by hand immediately before the final output. But again, final printed output of the number is basically the useful use I see for a function that returns significant digits. And for that purpose I think it should be right right, and actually output the number of significant digits requested. > > > signif(12345.12345,digits=10) > > [1] 12345.12 > > This is a different problem. The number is correctly computed as > 12345.12345 (or at least a representable number quite close to that), and > then the default display rounds it some more. Set options(digits=19) to see > it in its full glory. Aha, my mistake; I missed that setting. Pat Carr __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel