Fix strtod rounding of hex values (bug 14049)
Andreas Jaeger
aj@suse.com
Fri May 4 07:33:00 GMT 2012
On 05/02/2012 06:48 PM, Joseph S. Myers wrote:
> The strtod implementation, when handling a hexadecimal value with more
> digits than needed to compute the mantissa, passes a value "dig_no>
> 0" as the last argument to round_and_return. The meaning of this
> argument is whether any subsequent bits (after the mantissa and
> subsequent MP limb that includes at least the half-ulp bit) are
> nonzero.
>
> dig_no here counts the number of remaining digits *including* the one
> being processed, so is always positive here and half-way values always
> get rounded away from zero. Furthermore, while trailing zeros after
> '.' have been excluded from consideration earlier, those before '.'
> have not.
>
> I propose this patch to fix this bug by checking the rest of the
> string for nonzero digits. Because of the earlier handling of
> trailing zeros, there is no need to check for '.' here; if it occurs
> before dig_no becomes 0, there must be a nonzero digit after the '.'
> (and so '.' can be treated like a nonzero digit). Tested x86_64.
>
> 2012-05-02 Joseph Myers<joseph@codesourcery.com>
>
> [BZ #14049]
> * stdlib/strtod_l.c (____STRTOF_INTERNAL): Check for trailing
> nonzero digits before rounding a hex value.
> * stdlib/tst-strtod.c (tests): Add another test.
thanks, this is fine,
Andreas
--
Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
More information about the Libc-alpha
mailing list