gdtoa: Sync to match the latest version at netlib.org
As of Jan. 06 2023. Changelog from http://netlib.org/fp/changes (filtered):
20121220
dtoa.c and gdtoa.tgz: to avoid a possible one-time race when
Infinity or NaN appear in decimal->binary conversions done in parallel
threads, replace hexdig_init() with static initialization.
20131209
dtoa.c, gdtoa.tgz: when strtod computes its starting approximation,
allow z to involve one more digit for IEEE arithmetic and two more
digits for IBM-mainframe and VAX arithmetics. Thanks to Walter Qian
(water.qian@gmail.com) for suggesting this change, which makes some
conversions faster.
20151020
dtoa.c: add a test for dtoa() to return "1" under mode 4 when
converting some very small powers of 10, such as 1e-322 with
ndigits = 4 and 1e-319 with ndigits = 7 (examples provided by
jay.foad@gmail.com).
20160219
gdtoa.tgz: Adjust gdtoa(...,mode,...) to assume
"round near" when mode is 0 or 1. Make various tweaks to banish
(useless) warnings from "gcc -Wall -Wextra". Thanks to Jarkko
Hietaniemi <jhi@iki.fi> for advocating the latter exercise (and
correcting a typo in README).
20160307
dtoa.c: fix glitches with floating-point values in hexadecimal
notation: some values that should overflow to (appropriately signed)
Infinity, such as 0x1p1025, were mishandled, and values greater than
0x1p-1075 and less than 0x1.0000000000001p-1075 where treated as zero
rather than the smallest denormal number.
gdtoa.tgz: fix a bug with hexadecimal input greater than the
smallest denormal and less than the smallest denormal times the
smallest number greater than one. In round-to-nearest values, such
values should round to the smallest denormal rather than to zero.
Thanks to Albert Chan <albertmcchan@yahoo.com> for bug reports.
20160325
dtoa.c: fix a bug whereby dtoa(...,mode,...) with, e.g., mode = 2 or
3 could return a string with trailing zeros, contrary to specification.
An example provided by Albert Chan: dtoa(81320560005., 2, 10,...).
gdtoa.tgz: fix the analogous bug in gdtoa/dtoa.c and gdtoa/gdtoa.c
and apply the bug fix of 20151020 to gdtoa/dtoa.c.
20160429
dtoa.c, gdtoa.tgz (file dtoa.c): Fix a bug with dtoa mode 0 when
Honor_FLT_ROUNDS is defined: with some inputs and nondefault rounding
modes (e.g., 1.23 with round toward zero), the returned string was off
by one. When the new 64-bit integer logic is used, the test in
question is very unlikely to be used. This is another bug reported by
Albert Chan.
20160505
dtoa.c: fix some glitches in strtod() when Honor_FLT_ROUNDS is
defined: zero was returned for some decimal values that should have
been rounded to +- the smallest denormal, and +-Infinity was returned
for some hexadecimal strings with huge values that should have been
rounded to +- the largest finite value.
20160506
gdtoa.tgz: analogous bug fixes to those of 20160505.
20180730
strtodg.c in gdtoa.c: fix a glitch, introduced 20160506, with some
return values of +-Infinity: the STRTOG_Overflow bit was not set.
22 files changed