diff options
author | Joseph Myers <joseph@codesourcery.com> | 2012-11-22 14:58:41 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2012-11-22 14:58:41 +0000 |
commit | 1468ded38eb043991b3b0198ab55cacffb46ec04 (patch) | |
tree | 7ed374414c31cb98f23d12e93c118287bb81f300 | |
parent | 8e27e3cc453849158e069dbed0eea7b8113ab8ff (diff) | |
download | glibc-1468ded38eb043991b3b0198ab55cacffb46ec04.tar glibc-1468ded38eb043991b3b0198ab55cacffb46ec04.tar.gz glibc-1468ded38eb043991b3b0198ab55cacffb46ec04.tar.bz2 glibc-1468ded38eb043991b3b0198ab55cacffb46ec04.zip |
Fix ldbl-128ibm hypotl internal underflows (bug 14869).
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | math/libm-test.inc | 3 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/e_hypotl.c | 2 |
4 files changed, 10 insertions, 2 deletions
@@ -1,5 +1,10 @@ 2012-11-22 Joseph Myers <joseph@codesourcery.com> + [BZ #14869] + * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Scale + up arguments below 2**-450, not just those below 2**-500. + * math/libm-test.inc (hypot_test): Add another test. + [BZ #14868] * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Return a+b for ratio over 2**120, not 2**60. @@ -21,7 +21,7 @@ Version 2.17 14638, 14645, 14648, 14652, 14660, 14661, 14669, 14672, 14683, 14694, 14716, 14719, 14743, 14767, 14783, 14784, 14785, 14793, 14796, 14797, 14801, 14805, 14807, 14809, 14811, 14815, 14821, 14822, 14824, 14828, - 14831, 14835, 14838, 14856, 14863, 14865, 14866, 14868. + 14831, 14835, 14838, 14856, 14863, 14865, 14866, 14868, 14869. * Port to ARM AArch64 contributed by Linaro. diff --git a/math/libm-test.inc b/math/libm-test.inc index 21f46469de..b96f1bf92e 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -5731,6 +5731,9 @@ hypot_test (void) TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L); TEST_ff_f (hypot, 1.0L, 0x1p-61L, 1.0L); +#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106 + TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L); +#endif #if !(defined TEST_FLOAT && defined TEST_INLINE) TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L); diff --git a/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c b/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c index ce21194cd5..768bd3b06c 100644 --- a/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c +++ b/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c @@ -83,7 +83,7 @@ __ieee754_hypotl(long double x, long double y) k += 600; kld = two600; } - if(hb < 0x20b0000000000000LL) { /* b < 2**-500 */ + if(hb < 0x23d0000000000000LL) { /* b < 2**-450 */ if(hb <= 0x000fffffffffffffLL) { /* subnormal b or 0 */ u_int64_t low; GET_LDOUBLE_LSW64(low,b); |