2004-11-09 Paul Eggert <eggert@cs.ucla.edu.
authorroland <roland>
Thu, 11 Nov 2004 22:30:56 +0000 (22:30 +0000)
committerroland <roland>
Thu, 11 Nov 2004 22:30:56 +0000 (22:30 +0000)
commitfb277e3a4c8e11eac93c4b0e8086a108845025f0
tree168103a04c3d6fc300a65f998d60029d5cf04dfc
parent2e15b3d13458427cb9ddc175dc850502491ae877
2004-11-09  Paul Eggert  <eggert@cs.ucla.edu.

[BZ #535]
* time/difftime.c: Fix a double-rounding bug on hosts with
64-bit time_t and long double being IEEE double.  Also, port
to more valid C99 hosts, even those that have padding bits.
Don't include <values.h> since it is marked as an obsolescent
interface.  Include <limits.h>, <float.h>, and <stdint.h> instead.
(TYPE_BITS, TYPE_FLOATING, TYPE_SIGNED): New macros.
(subtract): New static function, that works correctly without
double-rounding, even on hosts with 64-bit time_t.  Also cater
to hosts with padding bits.
(__difftime): Use it.  Use DBL_MANT_DIG and LDBL_MANT_DIG to
determine whether floating types are wide enough: the old
test (which used sizeof) could in theory report the wrong results
on hosts with padding bits in floating-point values.
time/difftime.c