Fix dbl-64 hypot spurious underflows (bug 16314).

This commit is contained in:
Joseph Myers 2013-12-17 13:43:40 +00:00
parent c88769dda4
commit 6432a5409c
5 changed files with 759 additions and 753 deletions

View File

@ -1,5 +1,12 @@
2013-12-17 Joseph Myers <joseph@codesourcery.com>
[BZ #16314]
* sysdeps/ieee754/dbl-64/e_hypot.c (__ieee754_hypot): Adjust up
values below 2**-450, not 2**-500.
* math/auto-libm-test-in: Don't allow spurious underflow from
hypot.
* math/auto-libm-test-out: Regenerated.
[BZ #16316]
[BZ #16330]
* sysdeps/ieee754/dbl-64/e_hypot.c (__ieee754_hypot): Update

2
NEWS
View File

@ -22,7 +22,7 @@ Version 2.19
15988, 15997, 16032, 16034, 16036, 16037, 16038, 16041, 16055, 16071,
16072, 16074, 16077, 16078, 16103, 16112, 16143, 16144, 16146, 16150,
16151, 16153, 16167, 16172, 16195, 16214, 16245, 16271, 16274, 16283,
16289, 16316, 16330.
16289, 16314, 16316, 16330.
* The public headers no longer use __unused nor __block. This change is to
support compiling programs that are derived from BSD sources and use

View File

@ -302,8 +302,7 @@ hypot -5.7e7 0
hypot 0.75 1.25
hypot 1.0 0x1p-61
hypot 0x1p+0 0x1.fp-129
# Bug 16314: spurious underflow exception may occur.
hypot 0x1.23456789abcdef0123456789ab8p-500 0x1.23456789abcdef0123456789ab8p-500 spurious-underflow:dbl-64
hypot 0x1.23456789abcdef0123456789ab8p-500 0x1.23456789abcdef0123456789ab8p-500
hypot 0x3p125 0x4p125 no-test-inline:flt-32
hypot 0x1.234566p-126 0x1.234566p-126 no-test-inline:flt-32
hypot 0x3p1021 0x4p1021 no-test-inline:dbl-64

File diff suppressed because it is too large Load Diff

View File

@ -89,7 +89,7 @@ __ieee754_hypot (double x, double y)
SET_HIGH_WORD (a, ha);
SET_HIGH_WORD (b, hb);
}
if (__builtin_expect (hb < 0x20b00000, 0)) /* b < 2**-500 */
if (__builtin_expect (hb < 0x23d00000, 0)) /* b < 2**-450 */
{
if (hb <= 0x000fffff) /* subnormal b or 0 */
{