Fix ldbl-128ibm hypotl internal underflows (bug 14869).

This commit is contained in:
Joseph Myers 2012-11-22 14:58:41 +00:00
parent 8e27e3cc45
commit 1468ded38e
4 changed files with 10 additions and 2 deletions

View File

@ -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.

2
NEWS
View File

@ -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.

View File

@ -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);

View File

@ -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);