Skip to content
  • Joseph Myers's avatar
    5556d30c
    Fix strtof decimal rounding close to half least subnormal (bug 18247). · 5556d30c
    Joseph Myers authored
    Bug 18247 is an off-by-one error in strtof's determination of a
    decimal exponent such that any value with that decimal exponent is at
    most half the least subnormal and so the appropriate underflowing
    value for the rounding mode can be determined with no
    multiple-precision computations.  (Whether the value is in fact safe
    despite the off-by-one depends on the floating-point format in
    question.  It's wrong for float and for m68k ldbl-96 but not for other
    supported formats.)  This patch corrects the computation of the
    exponent in question to be safe in general, adding a comment
    explaining the new computation.
    
    Tested for x86_64.
    
    	[BZ #18247]
    	* stdlib/strtod_l.c (____STRTOF_INTERNAL): Decrease minimum
    	decimal exponent by 1.
    	* stdlib/tst-strtod-round-data: Add more tests.
    	* stdlib/tst-strtod-round.c (tests): Regenerated.
    5556d30c
    Fix strtof decimal rounding close to half least subnormal (bug 18247).
    Joseph Myers authored
    Bug 18247 is an off-by-one error in strtof's determination of a
    decimal exponent such that any value with that decimal exponent is at
    most half the least subnormal and so the appropriate underflowing
    value for the rounding mode can be determined with no
    multiple-precision computations.  (Whether the value is in fact safe
    despite the off-by-one depends on the floating-point format in
    question.  It's wrong for float and for m68k ldbl-96 but not for other
    supported formats.)  This patch corrects the computation of the
    exponent in question to be safe in general, adding a comment
    explaining the new computation.
    
    Tested for x86_64.
    
    	[BZ #18247]
    	* stdlib/strtod_l.c (____STRTOF_INTERNAL): Decrease minimum
    	decimal exponent by 1.
    	* stdlib/tst-strtod-round-data: Add more tests.
    	* stdlib/tst-strtod-round.c (tests): Regenerated.
Loading