xref: /freebsd/contrib/gdtoa/changes (revision 911f0260390e18cf85f3dbf2c719b593efdc1e3c)
1Sun Jun 30 13:48:26 EDT 1991:
2  dtoa.c: adjust dtoa to allow negative ndigits for modes 3,5,7,9
3(fixed-point mode); fix rounding bug in these modes when the input
4d (to be converted) satisfies 10^-(ndigits+1) <= |d| < 10^-ndigits ,
5i.e., when the result, before rounding, would be empty but might
6round to one digit.  Adjust the decpt returned in these modes when
7the result is empty (i.e., when |d| <= 5 * 10^-ndigits).
8
9Tue Jul  2 21:44:00 EDT 1991
10  Correct an inefficiency introduced 2 days ago in dtoa's handling of
11integers in modes 0, 1.
12
13Mon Sep  9 23:29:38 EDT 1991
14  dtoa.c: remove superfluous declaration of size_t.
15
16Sun Oct  6 15:34:15 EDT 1991
17  dtoa.c: fix another bug in modes 3,5,7,9 when the result, before
18rounding, would be empty, but rounds to one digit: *decpt was low by
19one.
20
21Sat Jan 18 12:30:04 EST 1992
22  dtoa.c: add some #ifdef KR_headers lines relevant only if IBM is
23defined; for input decimal strings representing numbers too large, have
24strtod return HUGE_VAL only if __STDC__ is defined; otherwise have it
25return +-Infinity for IEEE arithmetic, +- the largest machine number
26for IBM and VAX arithmetic.  (If __STDC__ is not defined, HUGE_VAL may
27not be defined either, or it may be wrong.)
28
29Mon Apr 27 23:13:43 EDT 1992
30  dtoa.c: tweak strtod (one-line addition) so the end-pointer = start
31pointer when the input has, e.g., only white space.
32
33Thu May  7 18:04:46 EDT 1992
34  dtoa.c: adjust treatment of exponent field (in strtod) to behave
35reasonably with huge numbers and 16-bit ints.
36
37Fri Jun 19 08:29:02 EDT 1992
38  dtoa.c: fix a botch in placement of #ifdef __cplusplus (which only
39matters if you're using a C++ compiler).
40
41Wed Oct 21 11:23:07 EDT 1992
42  dtoa.c: add #ifdef Bad_float_h lines for systems with missing or
43inferior float.h .
44
45Thu Apr 22 07:54:48 EDT 1993
46  dtoa.c: change < to <= in line 2059:
47<	for(result_k = 0; sizeof(Bigint) - sizeof(unsigned long) + j < i;
48---
49>	for(result_k = 0; sizeof(Bigint) - sizeof(unsigned long) + j <= i;
50With 32-bit ints, the former could give too small a block for the return
51value when, e.g., mode = 2 or 4 and ndigits = 24 (16 for 16-bit ints).
52
53Mon Jun 21 12:56:42 EDT 1993
54  dtoa.c: tweak to work with 32-bit ints and 64-bit longs
55when compiled with -DLong=int .
56
57Wed Jan 26 11:09:16 EST 1994
58  dtoa.c: fix bug in strtod's handling of numbers with very
59negative exponents (e.g. 1.8826e-512), which should underflow to 0;
60fix storage leak in strtod with underflows and overflows near
61the underflow and overflow thresholds.
62
63Mon Feb 28 11:37:30 EST 1994
64  dtoa.c:
6585a86,89
66>  * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n)
67>  *	if memory is available and otherwise does something you deem
68>  *	appropriate.  If MALLOC is undefined, malloc will be invoked
69>  *	directly -- and assumed always to succeed.
7087a92,95
71> #ifndef MALLOC
72> #define MALLOC malloc
73> #endif
74>
75352c360
76< 		rv = (Bigint *)malloc(sizeof(Bigint) + (x-1)*sizeof(Long));
77---
78> 		rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(Long));
79
80Thu Mar  3 16:56:39 EST 1994
81  dtoa.c: if MALLOC is #defined, declare it.
82
83Wed Jan  4 15:45:34 EST 1995
84  dtoa.c: add CONST qualification to tens, bigtens, tinytens (for use
85on embedded systems with little spare RAM).
86
87Fri Mar  1 08:55:39 EST 1996
88  g_fmt.c: honor the sign of 0 and return the first argument (buf).
89
90Sat Jul  6 07:59:28 EDT 1996
91  dtoa.c: cosmetic changes: "ULong" rather than "unsigned Long";
92update comments to reflect AT&T breakup.
93
94Mon Aug  5 23:31:24 EDT 1996
95  dtoa.c: add comment about invoking _control87(PC_53, MCW_PC)
96(or the equivalent) on 80x87 machines before calling strtod or dtoa.
97
98Tue Dec 17 15:01:56 EST 1996
99  dtoa.c: new #define possibilities: #define INFNAN_CHECK to have
100strtod check (case insensitively) for "Infinity" and "NaN" on machines
101with IEEE arithmetic; #define MULTIPLE_THREADS if the system offers
102preemptively scheduled multiple threads, in which case you must supply
103routines ACQUIRE_DTOA_LOCK(n) and FREE_DTOA_LOCK(n) (n = 0 or 1).
104New void freedtoa(char*) for freeing values returned by dtoa; use of
105freedtoa() is required if MULTIPLE_THREADS is #defined, and is merely
106recommended otherwise.
107  g_fmt.c: adjusted to invoke freedtoa().
108
109Wed Feb 12 00:40:01 EST 1997
110  dtoa.c: strtod: on IEEE systems, scale to avoid intermediate
111underflows when the result does not underflow; compiling with
112-DNO_IEEE_Scale restores the old logic.  Fix a bug, revealed by
113input string 2.2250738585072012e-308, in treating input just less
114than the smallest normalized number.  (The bug introduced an extra
115ULP of error in this special case.)
116
117Tue May 12 11:13:04 EDT 1998
118  dtoa.c: strtod: fix a glitch introduced with the scaling of 19970212
119that caused one-bit rounding errors in certain denormal numbers, such
120as 8.44291197326099e-309, which was read as 8.442911973260987e-309.
121Remove #ifdef Unsigned_Shifts logic in favor of unsigned arithmetic.
122Unless compiled with -DNO_LONG_LONG, use 64-bit arithmetic where
123possible.
124
125Fri May 15 07:49:07 EDT 1998
126  dtoa.c: strtod: fix another glitch with scaling to avoid underflow
127with IEEE arithmetic, again revealed by the input string
1282.2250738585072012e-308, which was rounded to the largest denormal
129rather than the smallest normal double precision number.
130
131Wed Aug  5 23:27:26 EDT 1998
132  gdtoa.tar.gz: tweaks in response to comments from Shawn C. Sheridan
133(with no effect on the resulting .o files except when strtod.c is
134compiled with -DNO_ERRNO); bigtens --> bigtens_D2A (a symbol meant
135to be private to gdtoa.a).
136
137Sat Sep 12 17:05:15 EDT 1998
138  gdtoa.tar.gz: more changes in response to comments from Shawn C.
139Sheridan (including repair of a glitch in g_ffmt.c).  For consistency
140and possible convenience, there are some new functions and some name
141changes to existing ones:
142	Old	New
143	---	g_xLfmt
144	strtoQ	strtopQ
145	---	strtopd
146	strtodd	strtopdd
147	---	strtopf
148	strtox	strtopx
149	---	strtopxL
150	---	strtorxL
151	---	strtoIxL
152Functions strtopd and strtopf are variations of strtod and strtof,
153respectively, which write their results to their final (pointer)
154arguments.  Functions strtorf and strtord are now analogous to the
155other strtor* functions in that they now have a final pointer
156argument to which they write their results, and they return the
157int value they get from strtodg.
158  The xL family (g_xLfmt, strto[Irp]xL) is a variation of the old x
159family (for 80-bit IEEE double-extended precision) that assumes the
160storage layout of the Motorola 68881's double-extended format:  80
161interesting bits stored in 3 unsigned 32-bit ints (with a "hole", 16
162zero bits, in the word that holds the sign and exponent).  The x
163family now deals with 80-bit (5 unsigned 16-bit ints) rather than
16496-bit arrays (3 unsigned 32-bit ints) that hold its 80-bit
165double-extended values.  (This relaxes the alignment requirements of
166the x family and results in strto[Ipr]x writing 80 rather than 96 bits
167to their final arguments.)
168  Each g_*fmt routine now returns a pointer to the null character
169that terminates the strings it writes, rather than a pointer to
170the beginning of that string (the first argument).  These routines
171still return 0 (NULL) if the first argument is too short.
172  The second argument to g_dfmt is now pointer (to a double) rather
173than a double value.
174
175Thu Oct 29 21:54:00 EST 1998
176  dtoa.c: Fix bug in strtod under -DSudden_Underflow and (the default)
177-DAvoid_Underflow: some numbers that should have suffered sudden
178underflow were scaled inappropriately (giving nonzero return values).
179Example: "1e-320" gave -3.6304123742133376e+280 rather than 0.
180
181Mon Nov  2 15:41:16 EST 1998
182  dtoa.c: tweak to remove LL suffixes from numeric constants (for
183compilers that offer a 64-bit long long type but do not recognize the
184LL constants prescribed by C9x, the proposed update to the ANSI/ISO C
185standard).  Thanks to Earl Chew for pointing out the existence of such
186compilers.
187  gdtoa.tar.gz: renamed gdtoa.tgz and updated to incorporate the above
188changes (of 29 Oct. and 2 Nov. 1998) to dtoa.c.
189
190Thu Mar 25 17:56:44 EST 1999
191  dtoa.c, gdtoa.tgz: fix a bug in strtod's reading of 4.9e-324:
192it returned 0 rather than the smallest denormal.
193
194Mon Apr 12 10:39:25 EDT 1999
195  gdtoa.tgz: test/ftest.c: change %.7g to %.8g throughout.
196
197Fri Aug 20 19:17:52 EDT 1999
198  gdtoa.tgz: gdtoa.c: fix two bugs reported by David Chase (thanks!):
1991. An adjustment for denormalized numbers around 503 was off by one.
2002. A check for "The special case" around line 551 omitted the condition
201that we not be at the bottom of the exponent range.
202
203Mon Sep 13 10:53:34 EDT 1999
204  dtoa.c: computationally invisible tweak for the benefit of people
205who actually read the code:
206
2072671c2671
208< 		 && word0(d) & Exp_mask
209---
210> 		 && word0(d) & (Exp_mask & Exp_mask << 1)
211
212I.e., in dtoa(), the "special case" does not arise for the smallest
213normalized IEEE double.  Thanks to Waldemar Horwat for pointing this
214out and suggesting the modified test above.  Also, some tweaks for
215compilation with -DKR_headers.
216  gdtoa.tgz: gdtoa.c: analogous change:
217
218552c552
219< 		if (bbits == 1 && be0 > fpi->emin) {
220---
221> 		if (bbits == 1 && be0 > fpi->emin + 1) {
222
223This has no effect on the g*fmt.c routines, but might affect the
224computation of the shortest decimal string that rounds to the
225smallest normalized floating-point number of other precisions.
226  gdota.tgz: test/d.out test/dI.out test/dd.out: updated to reflect
227previous changes (of 19990820); test/*.c: most test programs modified
228to permit #hex input.  See the comments.
229
230Fri Sep 17 01:39:25 EDT 1999
231  Try again to update dtoa.c: somehow dtoa.c got put back to a version
232from 3 years ago after this "changes" file was updated on 13 Sept. 1999.
233One more tweak to omit a warning on some systems:
2342671c2671
235<		 && word0(d) & (Exp_mask & Exp_mask << 1)
236---
237>		 && word0(d) & (Exp_mask & ~Exp_msk1)
238Plus changes to avoid trouble with aggressively optimizing compilers
239(e.g., gcc 2.95.1 under -O2).  On some systems, these changes do not
240affect the resulting machine code; on others, the old way of viewing
241a double as a pair of ULongs is available with -DYES_ALIAS.
242
243Tue Sep 21 09:21:25 EDT 1999
244  gdtoa.tgz: changes analogous to those of 17 Sept. 1999 to dtoa.c to
245avoid trouble with aggressively optimizing compilers.
246
247Wed Dec 15 13:14:38 EST 1999
248  dtoa.c: tweak to bypass a bug with HUGE_VAL on HP systems.
249
250Mon Jan 17 18:32:52 EST 2000
251  dtoa.c and gdtoa.tgz: strtod: set errno = ERANGE on all inputs that
252underflow to zero (not just those sufficiently less than the smallest
253positive denormalized number).
254  gdtoa.tgz: README: point out that compiling with -DNO_ERRNO inhibits
255errno assignments (by strtod and the core converter, strtodg).
256
257Tue Jan 18 16:35:31 EST 2000
258  dtoa.c and gdtoa.tgz: strtod: modify the test inserted yesterday so
259it may work correctly with buggy 80x87 compilers.  (The change matters,
260e.g., to Microsoft Visual C++ 4.2 and 6.0.)
261
262Thu Nov  2 21:00:45 EST 2000
263  dtoa.c and gdtoa.tgz:
2641. Fix bug in test for exact half-way cases of denormalized numbers
265   (without -DNO_IEEE_Scale).
2662. Compilation with -DNO_ERRNO prevents strtod from assigning
267   errno = ERANGE when the result overflows or underflows to 0.
2683. With IEEE arithmetic and no -DNO_IEEE_Scale, adjust scaling so
269   ulp(d) never returns a denormalized number.  This and other tweaks
270   permit strtod and dtoa to work correctly on machines that flush
271   underflows to zero but otherwise use IEEE arithmetic without
272   Sudden_Underflow being #defined (and with strtod simply returning 0
273   instead of denormalized numbers).
2744. Compilations with -DUSE_LOCALE causes strtod to use the current
275   locale's decimal_point value.
2765. Under compilations with -DINFNAN_CHECK, strtod and strtodg (case
277   insensitively) treat "inf" the same as "infinity" and, unless
278   compiled with -DNo_Hex_NaN, accept "nan(x)", where x is a string of
279   hexadecimal digits and spaces, as a NaN whose value is constructed
280   from x (as explained in comments near the top of dtoa.c and in
281   gdtoaimp.h).
2826. The default PRIVATE_MEM is increased slightly (to 2304), and comments
283   near the top of dtoa.c provide more discussion of PRIVATE_MEM.
2847. Meanings of dtoa modes 4,5,8,9 changed.  See comments in dtoa.c and
285   gdtoa.c; modes 4 and 5 may now provide shorter strings that round
286   (in round-nearest mode) to the given double value.  (Paxson's
287   testbase program is unhappy with this new rounding, as it can
288   introduce an error of more than one base-10 ulp when 17 or more
289   decimal digits are requested.)
2908. With IEEE arithmetic, compilation with -DHonor_FLT_ROUNDS causes
291   strtod and dtoa to round according to FLT_ROUNDS:
292	0 ==> towards 0,
293	1 ==> nearest,
294	2 ==> towards +Infinity,
295	3 ==> towards -Infinity.
2969. With IEEE arithmetic, compilation with -DSET_INEXACT causes extra
297   computation (and sometimes slower conversions in dtoa and strtod,
298   particularly for dtoa in cases where otherwise some simple floating-
299   point computations would suffice) to set the IEEE inexact flag
300   correctly.  As comments in dtoa.c explain in more detail, this
301   requires compilation in an environment (such as #include "dtoa.c"
302   in suitable source) that provides
303		int get_inexact(void);
304		void clear_inexact(void);
30510. On input "-x", return 0 rather than -0.
306
307gdtoa.tgz: gethex.c: adjust logic for reading hex constants to accord
308with current wording of the C99 standard.  Previously, I thought hex
309constants read by strtod and friends had to have either a decimal point
310or an exponent field; p. 307 of the C99 standard states that both are
311optional.  Because of the complexity of this reading, it is available
312only in the variant of strtod that appears in gdtoa.tgz.
313
314strtodg (gdtoa.tgz): New return value STRTOG_NaNbits (with
315STRTOG_NoNumber renumbered).  Allow STRTOG_Neg bit in strtodg returns
316for STRTOG_NaN and STRTOG_NaNbits.
317
318gdtoa.tgz: Fix uninitialized variable bug in g_Qfmt.c's handling of NaNs.
319
320Mon Nov 13 14:00:05 EST 2000
321  gdtoa.tgz: strtodg:  fix a storage leak and an apparently rare infinite
322loop with a boundary case of directed rounding.  Example input to
323gdtoa/test/Qtest where the loop bug bit:
324	r 3
325	35184372088831.999999999999999999999999999999999999
326This was revealed by testbase for quad precision Solaris arithmetic;
327it did not show up in several other testbase configurations.
328
329Wed Feb  7 12:56:11 EST 2001
330  dtoa.c:  fix bug (possible infinite loop, e.g., with
3312.47032822920623272e-324) introduced 20001113 in handling the special
332case of a power of 2 to be rounded down one ulp.  Add test (required
333by changes of 20001113) for the extra special case of 2^-1075 (half
334the smallest denormal).
335  gdtoa.tgz: corresponding adjustments to strtod.c and strtodg.c.
336
337Tue Mar 13 00:46:09 EST 2001
338  gdtoa.tgz: gdtoa/strtodg.c: fix bug in handling values exactly half
339an ulp less than the smallest normal floating-point number;
340gdtoa/*test.c: fix glitch in handling "n ..." lines (intended to
341change "ndig").
342
343Wed Mar  6 10:13:52 EST 2002
344  gdtoa.tgz:  add gdtoa/test/strtodt.c and gdtoa/test/testnos3 to test
345strtod on hard cases posted by Fred Tydeman to comp.arch.arithmetic on
34626 Feb. 1996.  Add comment to gdtoa/README about strtod requiring true
347IEEE arithmetic (with 53-bit rounding precision on 80x87 chips).
348In gdtoa/test, automate selection of expected output files [xQ]*.out.
349
350Wed Mar  5 10:35:41 EST 2003
351  gdtoa.tgz:  fix a bug in strtod's handling of 0-valued 0x... "decimal"
352strings.  A fault was possible.  Thanks to David Shultz for reporting
353this bug.
354
355Tue Mar 18 09:38:28 EST 2003
356  gdtoa.tgz:  fix a glitch in strtodg.c with -DUSE_LOCALE; add #ifdef
357USE_LOCALE lines to g__fmt.c (to affect binary --> decimal conversions
358via the g*fmt routines), and add comments about -DUSE_LOCALE to README.
359In short, compiling strtod.c, strtodg.c, and g__fmt.c with -DUSE_LOCALE
360causes them to determine the decimal-point character from the current
361locale.  (Otherwise it is '.'.)
362
363Fri Mar 21 16:36:27 EST 2003
364  gdtoa.tgz:  gethex.c: add #ifdef USE_LOCAL logic; strtod.c: fix a
365glitch in handling 0x... input (the return from gethex was ignored).
366
367Wed Mar 26 15:35:10 EST 2003
368  gdtoa.tgz:  gethex.c:  pedantic (and normally invisible) change:
369use unsigned char for decimalpoint variable (under -DUSE_LOCALE).
370
371Sat Jan 17 23:58:52 MST 2004
372  gdtoa.tgz:  gethex.c:  supply missing parens in test for whether a
373denormal result should be zero, correct logic for rounding up when the
374result is denormal, and when returning zero or Infinity, set *bp = 0;
375strtod.c:  switch on gethex(...)  & STRTOG_Retmask rather than just on
376gethex(), and only copybits(..., bb) when bb is nonzero.  This
377mattered for underflows and overflows in 0x notation.
378
379Thu Mar 25 22:34:56 MST 2004
380 dtoa.c and gdtoa.c/misc.c:  change "(!x & 1)" to "(!x)" to avoid
381confusion by human readers -- the object code is unaffected (with
382reasonable compilers).
383
384Mon Apr 12 00:44:22 MDT 2004
385 dtoa.c and gdtoa.tar.gz:  update contact info. for dmg and correct
386page numbers in comment on Steele & White (1990).
387 gdtoa.tgz:  add strtodnrp.c for a variant of strtod that is slower
388but does not require 53-bit rounding precision on Intel IA32 systems.
389
390Tue Apr 13 00:28:14 MDT 2004
391 gdtoa.tgz: strtod.c: fix glitch when both INFNAN_CHECK and No_Hex_NaN
392are #defined.  Thanks to David Mendenhall for pointing this bug out.
393
394Wed Jan  5 22:39:17 MST 2005
395  gdtoa.tgz:
396    gethex.c:  fix the bug reported by Stefan Farfeleder of ignoring a
397binary-exponent-part if the converted number is zero.
398    strto[pr]x.c: fix bug reported by Stefan Farfeleder in setting the
399exponent of denormals (which should be 0, not 1).
400    g_xfmt.c: fix a corresponding bug with denormals.
401    strtodg.c: fix a bug under IBM (base 16) arithemtic reported
402by Greg Alexander:  a correction to the binary exponent for changes to
403the exponent of a native double value for avoiding overflow had to be
404multiplied by 4 ("e2 <<= 2;").
405    Various files: minor tweaks for portability.
406
407Sat Jan 15 15:36:03 MST 2005
408  gdtoa.tgz: gethex.c:  fix a glitch introduced last week (and reported
409by Stefan Farfelder) with 0x forms with no nonzero digits before the "."
410character, e.g., 0x.1 (which was rendered as 0 rather than .0625).
411  gdtoa.tgz: many files: add automatic computation of gd_qnan.h for
412giving the system-dependent format of a quiet NaN (the one generated
413for Infinity - Infinity).  Tweak test/makefile so differences in the
414spelling of Infinity ("INF" or "Inf" on some systems) do not matter.
415Fix bug in strtod.c and strtodg.c under which, e.g., -.nan was read
416as NaN rather than unacceptable input (causing return 0).  Adjust
417comments in README about nan(...).  Fix glitch in test/dt.c.
418
419Sun Jan 16 18:22:13 MST 2005
420  gdtoa.tgz: strtodg.c: fix long-standing bug in handling input
421that rounds up to 2^nbits, e.g., strtof("16777215.5").  Thanks to
422Edward Moy for reporting this problem.
423  gdtoa.tgz: Fix some bugs with -DJust_16.
424
425Thu Sep 22 22:40:16 MDT 2005
426gdtoa.tgz:
427  strtod.c: unless prevented by -DNO_FENV_H, include C99's fenv.h
428and with hex input, get the current rounding mode from fegetround().
429With decimal input, strtod honors the rounding mode automatically.
430Thanks to David Schultz (das at FreeBSD dot ORG) for pointing
431  strtodg.c: fix a bug with handling numbers very near the largest
432possible one, which were sometimes incorrectly converted to Infinity.
433Thanks to Edward Moy (emoy at apple dot com) for pointing this out.
434  g_Qfmt.c: change strcpy to strcp.  Thanks to J. T. Conklin
435(jtc at acorntoolworks dot com) for pointing this out.
436  test/xtest.c:  fix some subscript bugs.
437  test/x.ou0, test/x.ou1, test/xL.: update in response to the above fix to
438test/xtest.c.
439  test/makefile:  add -lm to some link lines (needed for fegetround).
440
441Sun Jan 21 20:26:44 MST 2007
442gdtoa.tgz:
443  strtodg.c:  fix a botch in the test of whether to increase rvbits
444before terminating the big for(;;) loop with dsign true:  change
445	if (hi0bits(rvb->x[(rvb->wds - 1) >> kshift])
446			!= j)
447		rvbits++;
448to
449	if (hi0bits(rvb->x[rvb->wds - 1]) != j)
450		rvbits++;
451Example of input where this bug bit:  1.9e27.  Thanks to Edward Moy
452<emoy@apple.com> for providing this example.  Also, simplify the
453preceding computation of j.
454  test/README:  add comment that strtodt needs to operate with 53-bit
455rounding precision on Intel x86 systems, and add a pointer to Paxson's
456paper.
457
458Sat Mar 15 11:44:31 MDT 2008
459  dtoa.c and gdtoa.tgz:  with -DINFNAN_CHECK and without
460-DGDOTA_NON_PEDANTIC_NANCHECK, conform to the ill-advised prescription
461in the C99 standard of consuming (...)  in "nan(...)"  even when ...
462is not of the expected form.  Allow an optional 0x or 0X to precede
463the string of hex digits in the expected form of ... .
464  gdtoa.tgz: gethex.c: have, e.g., strtod("0xyz",&se) set se to "xyz".
465Previously it was incorrectly set to "0xyz".
466
467Thu Aug 28 22:37:35 MDT 2008
468  dtoa.c and gdtoa.tgz:  Fix a bug in strtod when compiled with
469-DHonor_FLT_ROUNDS:  in rounding modes other than "to nearest",
470strtod looped on input larger than and within a factor of 2 of
471the largest finite floating-point number.  Since FLT_ROUNDS is buggy
472on some (Linux) systems in that it does not reflect calls on
473fesetround(), when Honor_FLT_ROUNDS is #defined, get the curren
474rounding mode from fegetround() rather than FLT_ROUNDS, unless
475Trust_FLT_ROUNDS is also #defined.
476  gdtoa/test/getround.c in gdtoa.tgz: simply report the current
477rounding mode when the input line is "r" by itself.  (Previously it
478did so, but also complained of invalid input.)
479  gdtoa/gethex.c: fix an off-by-one bug in a rounding test; detect and
480deal with huge exponents (positive or negative).  This affected the
481reading of hexadecimal floating-point values (0x...).  Also set errno
482to ERANGE on out-of-range values (unless compiled with -DNO_ERRNO).
483  gdtoa/strtod.c: adjust scaling of tinytens[4] (as in dtoa.c) to
484avoid double rounding when dealing with numbers near the bottom of
485the exponent range.
486
487Sat Aug 30 23:37:07 MDT 2008
488  gdtoa/gethex.c: ensure *bp is set to something (NULL if nothing else).
489  Bring gdtoa/xsum0.out and gdtoa/test/xsum0.out up to date.
490
491Tue Sep  9 22:08:30 MDT 2008
492  gdtoa/strto*.c and gdtoa/*fmt.c:  if compiled with -DUSE_LOCALE, use
493the current locale's decimal point character string.
494  gdtoa/gdtoa.c: trim trailing zeros in a missed case (e.g., ndigits = 6
495on 1020302).
496  dtoa.c and gdtoa/strtod.c: on systems with IEEE arithmetic (and without
497NO_ERRNO being defined) set ERANGE for denormal values as well as real
498underflows.
499  gdtoa/strtodg.c:  fix an off-by-one bug in rounding to the largest
500representable magnitude when nbits is a multiple of 32.
501  gdtoa/*fmt.c and gdtoa/gdtoa.h:  bufsize changed from unsigned to size_t.
502  gdtoaimp.h, *fmt.c:  change in calling sequence to internal g__fmt(),
503which now explicitly checks bufsize.
504  Relevant routines (see README) honor the current rounding mode if
505compiled with -DHonor_FLT_ROUNDS on IEEE-arithmetic systems that provide
506the C99 fegetround() function.
507  gdtoa/test/getround.c can optionally be compiled with
508-DHonor_FLT_ROUNDS and/or -DUSE_MY_LOCALE for manual testing of gdtoa.a
509compiled with -DHonor_FLT_ROUNDS or -DUSE_LOCALE.
510
511Fri Oct 10 20:07:15 MDT 2008
512  gdtoa/gethex.c:  fix a bug reading hexadecimal floating-point values
513starting with "0xd" for a nonzero digit d (such as "0x1.0002p3").  The
514bug caused the values to be read as zero with endptr set incorrectly.
515
516Tue Oct 28 00:14:08 MDT 2008
517  gdtoa/strtod.c: fix a comment glitch (with commented {}).
518
519Tue Nov 11 23:05:25 MST 2008
520  gdtoa:  fix a glitch in the strto* routines when compiled with
521-DUSE_LOCALE and the locale's decimal-point string is two or more
522characters long.  Wrong conversions were then possible.
523
524Fri Dec  5 18:20:36 MST 2008
525  gdtoa.tgz: fix bugs with reading C99-style hexadecimal floating-point
526values when compiled with -DPack_16; on IEEE-arithmetic systems, make
527INFNAN_CHECK the default unless NO_INFNAN_CHECK is #defined.  (This is
528consistent with dtoa.c, which has worked this way for a while.)
529  dtoa.c:  add recognition of C99-style hexadecimal floating-point
530values (unless compiled with NO_HEX_FP is #defined).
531
532Thu Dec 11 23:10:23 MST 2008
533  dtoa.c: omit an unused variable.
534
535Fri Jan  2 22:45:33 MST 2009
536  dtoa.c: tweak to banish some compiler warnings.
537
538Sun Mar  1 20:57:22 MST 2009
539  dtoa.c, gdtoa/{g__fmt.c, gethex.c, strtod.c, strtodg.c}: change malloc
540to MALLOC.
541  dtoa.c and gdtoa/gdtoaimp.h and gdtoa/misc.c:  reduce Kmax, and use
542MALLOC and FREE or free for huge blocks, which are possible only in
543pathological cases, such as dtoa calls in mode 3 with thousands of
544digits requested, or strtod() calls with thousand of digits.  For the
545latter case, I have an alternate approach that runs much faster
546and uses less memory, but finding time to get it ready for distribution
547may take a while.
548
549Mon Mar 16 00:32:43 MDT 2009
550  dtoa.c:  Fix a bug under -DUSE_LOCALE in handling "decimal point"
551strings more than one character long.
552  dtoa.c and gdtoa/misc.c:  Remove a buggy test activated with
553-DDEBUG.
554  dtoa.c and gdtoa/gdtoa.c: simplify logic for "4 leading 0 bits".
555  dtoa.c:  Add logic (that can be disabled with -DNO_STRTOD_BIGCOMP
556and that) to strtod for more efficiently handling a very long input
557string.  It proceeds by initially truncating the input string, then if
558necessary comparing the whole string with a decimal expansion to
559decide close cases.  This logic is only used for input more than
560STRTOD_DIGLIM digits long (default 40), and for now only applies to
561IEEE arithmetic (for want of other kinds of platforms on which to run
562tests).  This only appears worthwhile for absurdly long input strings,
563so a corresponding update to gdtoa does not seem warranted.
564  dtoa.c, gdtoa.tgz:  tweaks (mostly adding unnecessary parens) to
565silence "gcc -Wall" warnings.  Aside from a couple of minor changes
566to banish erroneous warnings about uninitialized variables, the tweaks
567do not affect the generated object code.
568
569Sat Apr 11 23:25:58 MDT 2009
570  dtoa.c: fix glitch in compiling with -DNo_Hex_NaN and the bug of
571accepting (e.g.) ".nan" or ".inf" as NaN or Infinity.
572  gdtoa.tgz: tweaks to silence warnings from "gcc -Wstrict-aliasing=2";
573update xsum0.out files.
574
575Sun Apr 19 23:40:24 MDT 2009
576  dtoa.c, gdtoa/misc.c:  do not attempt to allocate large memory blocks
577from the private memory pool (which was an unlikely event, but a bug).
578  gdtoa/strtopx.c, gdtoa/strtopxL.c, gdtoa/strtorx.c, gdtoa/strtorxL.c:
579supply explicit bit for Infinity.  Note that the Q routines (which do
580not supply this bit) are appropriate for Sparc quad precision (probably
581known as long double with most current compilers).
582
583Wed Dec  9 08:14:52 MST 2009
584  gdtoa.tgz:  add gdtoa/printf.c* and modify makefile so "make Printf"
585adds a printf to gdtoa.a (to be accessed with #include "stdio1.h" to
586get gdtoa/stdio1.h, which you might install in some standard place).
587On Intel/AMD i386, x86_64, and Sparc systems, this adds formats %La,
588%Le, %Lf and %Lg to handle long double.  On x86_64 systems, it also
589adds %Lqa, %Lqe, %Lqf and %Lqg to handle 128-bit bit types (called
590__float128 by gcc and _Quad by the Intel compiler).  In gdtoa/test,
591"make pf_test" tests this printf (provided the system is an i386,
592x86_64, or Sparc system).  On x86_64 systems, "make pf_testLq" tests
593the %Lq...  formats (briefly).
594
595Mon Jan 11 22:25:17 MST 2010
596  dtoa.c: fix a minor performance bug and, under compilation with -DDEBUG,
597an erroneous error message "oversize b in quorem" in strtod's processing
598of some input that underflows to zero.  Also fix a bug in bigcomp()'s
599handling of numbers that will scale to denormal values.  The increments
600that bigcomp applied were ignoring the effects of denormalization.
601
602Sat Jan 23 00:25:54 MST 2010
603  dtoa.c:  Fix some glitches in recently introduced changes meant to
604speed up returns in pedantic cases.  In quorem, adjust #ifdef DEBUG
605stuff so it does not complain when bigcomp() calls quorem on input
606near the smallest representable number and rounding up by a bit causes
607a quorem return > 9 (which in this case is not a bug).  Fix a memory
608leak in the unlikely case of overflow only being detected after some
609high-precision integer computations.  Fix an off-by-one bug in
610handling a large number of digits with a few nonzero digits, followed
611by many zeros, and then some nonzero digits.  (This does not happen
612with sensible input.)  Fix an off-by-one bug in a recently introduced
613quick test for underflow (i.e., zero result) on input at the bottom of
614the exponent range.  Thanks to Mark Dickinson for pointing these bugs
615out.
616
617  dtoa.c and gdtoa/strtod.c:  Fix an obscure bug in strtod's handling
618of some inputs of many digits at the bottom of the exponent range:
619results were sometimes off by a bit when gdtoa/strtod.c or dtoa.c was
620compiled without -DNO_IEEE_SCALE and, for dtoa.c, when compiled with
621-DNO_STRTOD_BIGCOMP.
622
623  gdtoa/test/testnos3: add some examples that went wrong before
624the present changes.
625
626Sat Jan 23 23:29:02 MST 2010
627  dtoa.c: more tweaks relevant only to absurd input.
628
629Tue Feb  2 23:05:34 MST 2010
630  dtoa.c: add test for setting errno = ERANGE when input of many digits
631is rounded to Infinity or underflows to zero.  Fix a memory leak in
632such instances.
633  gdtoa/strtod.c: make some corresponding changes.
634
635Wed Jul  7 09:25:46 MDT 2010
636  dtoa.c:  adjust to use bigcomp when necessary when compiled with
637-DHonor_FLT_ROUNDS (and without -DNO_STRTOD_BIGCOMP), and the rounding
638mode is torwards +Infinity.  An input (supplied by Rick Regan
639<exploringbinary@gmail.com>) where this matters is
6401.100000000000000088817841970012523233890533447265626
641  gdtoa/strtod.c:  fix errors (introduced 20090411) when compiled
642with -DHonor_FLT_ROUNDS.
643
644Wed Sep 15 09:00:26 MDT 2010
645  dtoa.c, gdtoa/dtoa.c, gdtoa/gdtoa.c:  fix bugs with -DROUND_BIASED
646pointed out by Jay Foad.
647
648Mon Sep 27 13:43:30 MDT 2010
649  gdtoa/gdtoa.c: fix a glitch (not revealed by compilation) in the
650changes of 15 Sept. 2010.
651
652Fri Nov  5 13:02:41 MDT 2010
653  dtoa.c:  fix a bug related to bigcomp:  decimal strings with all
654zeros before the decimal point more than 40 significant digits that
655required use of bigcomp might be converted very incorrectly.
656Example: .010000000000000000057612911342378542997169 .
657Thanks to Rick Regan <exploringbinary@gmail.com> for reporting the
658symptoms and providing an example.
659
66020110403:
661  dtoa.c, gdtoa/gdtoaimp.h, gdtoa/strtod.c:  if
662ROUND_BIASED_without_Round_Up is #defined, assume ROUND_BIASED and
663omit the quick computation that would use ordinary arithmetic to
664compute the correctly rounded result with one rounding error.  If you
665want biased rounding with IEEE-style format "double" and will operate
666with rounding toward +Infinity, it suffices to #define ROUND_BIASED
667(and thus retain the quick computation when it is appropriate).
668  gdtoa/gdtoa.h: change default Long from long to int (with the goal
669of portability when compiling without -DLong=... specified).  On some
67064-bit systems, long is a 64-bit type; we need a 32-bit type here.
671  dtoa.c, gdtoa/gdtoa.c: fix a glith with ndigits with mode = 4 at
672the bottom of the exponent range, e.g., 1e-323.
673