[Rd] Floating point precision / guard digits? (PR#13771)

Dr. D. P. Kreil dpkreil at gmail.com
Sat Jun 20 15:45:58 CEST 2009


Dear Stavros,

Thank you for your fast reply!

So if I request a calculation of "0.3-0.1-0.1-0.1" and I do not get 0,
that is not an issue of rounding / underflow (or whatever the correct
technical term would be for that behaviour)?

I thought that guard digits would mean that 0.3-0.1*31 should be
calculated in higher precision than the final representation of the
result, i.e., avoiding that this is not equal to 0?

I am sorry if I am not from the field and although I have had some
basic background in numerics that has been more than a decade ago. If
you can suggest an online resource to help me use the right vocabulary
and better understand the fundamental concepts, I am of course
grateful.

Best regards,
David.


2009/6/20 Stavros Macrakis <macrakis at alum.mit.edu>:
> a) this is not a bug, so this is the wrong list
>
> b) 'underflow' does not mean what you think it means.
>
> c) guard digits and sticky bits do improve rounding behavior, but
> floating point will always remain approximate.
>
> d) if it is important to your application to perform exact arithmetic
> on rational numbers (and I suspect it is not), you might want to use
> that instead of floating-point. But even if implemented in R, most R
> calculations cannot use it.
>
> You may want to study up on floating-point arithmetic some more, though.
>
>         -s
>
> On 6/19/09, rbugs09 at kreil.org <rbugs09 at kreil.org> wrote:
>> Full_Name: D Kreil
>> Version: 2.8.1 and 2.9.0
>> OS: Debian Linux
>> Submission from: (NULL) (141.244.140.179)
>>
>>
>> Group: Accuracy
>>
>> I understand that most floating point numbers are approximated due to their
>> binary storage. On the other hand, I thought that modern math CPUs used
>> guard
>> digits to protect against trivial underflows. Not true?
>>
>> # integers, no problem
>>> 1+1+1==3
>> [1] TRUE
>> # binary floating point approximation underflows
>>> .1+.1+.1==.3
>> [1] FALSE
>>> .1+.1+.1==.3
>> [1] FALSE
>> # binary floating point exact for certain numbers
>>> .1+.1==.2
>> [1] TRUE
>>
>> I know that safe code should not test for quality of floats. Still, is R
>> underutilizing the power of the underlying hardware?
>>
>> Grateful for comments,
>> David.
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>



More information about the R-devel mailing list