[committed] libstdc++: Add std::from_chars for floating-point types
Jonathan Wakely
jwakely@redhat.com
Wed Jul 22 15:09:02 GMT 2020
On 21/07/20 20:08 +0000, Joseph Myers wrote:
>On Tue, 21 Jul 2020, Jonathan Wakely via Gcc-patches wrote:
>
>> I also noticed some strings give an underflow error with glibc's
>> strtod, but are valid for the Microsoft implementation. For example,
>> this one:
>> https://github.com/microsoft/STL/blob/master/tests/std/tests/P0067R5_charconv/double_from_chars_test_cases.hpp#L265
>>
>> Without the final '1' digit glibc returns DBL_MIN, but with the final
>> '1' digit (so a number larger than DBL_MIN) it underflows. Is that
>> expected?
>
>That's DBL_TRUE_MIN, not DBL_MIN. The IEEE rule is that, with default
>exception handling, an exact subnormal result does not raise the underflow
>exception flag, whereas an inexact tiny result raises both inexact and
>underflow flags; glibc mostly doesn't try to ensure an (exact) underflow
>exception is signaled for the case of exact underflow with traps on that
>exception enabled, only correct flags raised with default exception
>handling.
>
>(The way tininess is determined depends on the architecture. glibc strtod
>handles both cases, before-rounding and after-rounding architectures,
>modulo oddities where implementations of some CPU architectures don't
>appear to be consistent in their before-rounding / after-rounding choice.
>Note that on after-rounding architectures it depends on the result after
>rounding with normal precision but unbounded exponent range. One
>consequence of that is that the bound on the number of digits after the
>decimal point that may need to be considered, beyond just knowing whether
>any of them are nonzero, to determine the correctly rounded result and
>exceptions, is e.g. 1076 for binary64, not 1075; that is, two digits are
>needed beyond those needed for an exact representation of the least
>subnormal value, although only one such digit is needed for the correctly
>rounded result if you ignore after-rounding tininess detection.)
Aha, thanks very much for the explanation.
More information about the Libstdc++
mailing list