[PATCH 0/3] Fix powf inaccuracies up to ~169 ULP reported by Paul Zimmermann
brian.inglis@systematicsw.ab.ca
brian.inglis@systematicsw.ab.ca
Fri Sep 13 17:50:48 GMT 2024
On 2024-09-12 01:20, Paul Zimmermann wrote:
> Hi Brian,
>
>>> $ gcc test_printf.c /localdisk/zimmerma/newlib-4.4.0.20231231/build/x86_64/newlib/libm.a
>>> $ ./a.out
>>> x=0.9694811147877118 upward:0.969481
>>>
>>> Is that a known issue?
>>
>> Is that not only a requirement of IEEE arithmetic operations?
>> Is that also an expected requirement of *printf?
>
> the C standard [1] writes on page 511:
>
> 15 The binding for the convertFormat operation applies to all conversions among IEC 60559 formats.
> Therefore, for implementations that conform to Annex F, conversions between decimal floating types
> and standard floating types with IEC 60559 formats are correctly rounded and raise floating-point
> exceptions as specified in IEC 60559.
Those are references to IEC/IEEE 60559 BFP binary and DFP decimal FPU formats in
F.3 Operations.
> [1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf
N3301 is C203Y WD with final C2024 text plus a few new changes: F3. Operations
para.15 p.534.
GCC float.h sets FLT_ROUNDS 1 and CR_DECIMAL_DIG to UINTMAX_MAX, and says it
follows *C99* Annex F except where it says results depend on the standard
library implementation.
The newlib and glibc standard I/O libraries say only correctly rounded, and some
limits on correctly rounded digits, but say nothing about Annex F or IEC/IEEE
60559.
--
Take care. Thanks, Brian Inglis Calgary, Alberta, Canada
La perfection est atteinte Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer but when there is no more to cut
-- Antoine de Saint-Exupéry
More information about the Newlib
mailing list