Re: [Rd] significant digits (PR#9682)

2008-06-03 Thread Patrick Carr
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)

2008-06-03 Thread Patrick Carr
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