freebsd-dev/lib/libc/gdtoa
David Schultz 76303a9735 Make several changes to the way printf handles hex floating point (%a):
1. Previously, printing the number 1.0 could produce 0x1p+0, 0x2p-1,
   0x4p-2, or 0x8p-3, depending on what happened to be convenient. This
   meant that printing a value as a double and printing the same value
   as a long double could produce different (but equivalent) results.
   The change is to always make the leading digit a 1, unless the
   number is 0. This solves the aforementioned problem and has
   several other advantages.

2. Use the FPU to do rounding. This is far simpler and more portable
   than manipulating the bits, and it fixes an obsure round-to-even
   bug. It also raises the exceptions now required by IEEE 754R.
   The drawbacks are that it is usually slightly slower, and it makes
   printf less effective as a debugging tool when the FPU is hosed
   (e.g., due to a buggy softfloat implementation).

3. On i386, twiddle the rounding precision so that (2) works properly
   for long doubles.

4. Make several simplifications that are now possible due to (2).

5. Split __hldtoa() into a separate file.

Thanks to remko for access to a sparc64 box for testing.
2008-04-12 03:11:36 +00:00
..
_hdtoa.c Make several changes to the way printf handles hex floating point (%a): 2008-04-12 03:11:36 +00:00
_hldtoa.c Make several changes to the way printf handles hex floating point (%a): 2008-04-12 03:11:36 +00:00
_ldtoa.c Fix handling of subnormals on i386/ia64/amd64. 2007-12-09 19:48:57 +00:00
glue.c Userland spinlocks bad. Sleep locks good. 2003-06-21 08:20:14 +00:00
machdep_ldisd.c
machdep_ldisQ.c In scanf, round according to the current rounding mode. 2007-12-03 07:17:33 +00:00
machdep_ldisx.c In scanf, round according to the current rounding mode. 2007-12-03 07:17:33 +00:00
Makefile.inc Make several changes to the way printf handles hex floating point (%a): 2008-04-12 03:11:36 +00:00
Symbol.map Export gdtoa's __ULto{x,Q}_D2A routine in a private namespace so 2007-12-16 21:15:57 +00:00