From: Joseph Myers Date: Thu, 22 Nov 2012 14:58:41 +0000 (+0000) Subject: Fix ldbl-128ibm hypotl internal underflows (bug 14869). X-Git-Tag: glibc-2.17~120 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1468ded38eb043991b3b0198ab55cacffb46ec04;p=thirdparty%2Fglibc.git Fix ldbl-128ibm hypotl internal underflows (bug 14869). --- diff --git a/ChangeLog b/ChangeLog index 69dd8fe2d82..34e93e53c4f 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 94e1260137a..51de010ebb5 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 21f46469de4..b96f1bf92e5 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 ce21194cd59..768bd3b06ca 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);