From 1468ded38eb043991b3b0198ab55cacffb46ec04 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 22 Nov 2012 14:58:41 +0000 Subject: Fix ldbl-128ibm hypotl internal underflows (bug 14869). --- ChangeLog | 5 +++++ NEWS | 2 +- math/libm-test.inc | 3 +++ sysdeps/ieee754/ldbl-128ibm/e_hypotl.c | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 69dd8fe..34e93e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2012-11-22 Joseph Myers + [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. diff --git a/NEWS b/NEWS index 94e1260..51de010 100644 --- a/NEWS +++ b/NEWS @@ -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 21f4646..b96f1bf 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 ce21194..768bd3b 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); -- cgit v1.1