Fix ldbl-128ibm atanl spurious underflows (bug 14871).

This commit is contained in:
Joseph Myers 2012-11-22 19:56:47 +00:00
parent 79c9b9feb4
commit 0a42601f27
4 changed files with 30 additions and 1 deletions

View File

@ -1,5 +1,10 @@
2012-11-22 Joseph Myers <joseph@codesourcery.com>
[BZ #14871]
* sysdeps/ieee754/ldbl-128ibm/s_atanl.c (__atanl): Return the
input for small inputs. Return +/- pi/2 for large inputs.
* math/libm-test.inc (atan_test): Add more tests.
* sysdeps/generic/unwind-dw2-fde-glibc.c
(_Unwind_IteratePhdrCallback): Declare P_DYNAMIC with
__attribute__ ((unused)).

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, 14869.
14831, 14835, 14838, 14856, 14863, 14865, 14866, 14868, 14869, 14871.
* Port to ARM AArch64 contributed by Linaro.

View File

@ -1195,6 +1195,14 @@ atan_test (void)
TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
TEST_f_f (atan, 0x1p-100L, 0x1p-100L);
#ifndef TEST_FLOAT
TEST_f_f (atan, 0x1p-600L, 0x1p-600L);
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_f_f (atan, 0x1p-10000L, 0x1p-10000L);
#endif
END (atan);
}

View File

@ -199,6 +199,22 @@ __atanl (long double x)
return atantbl[83];
}
if (k <= 0x3c800000) /* |x| <= 2**-55. */
{
/* Raise inexact. */
if (1e300L + x > 0.0)
return x;
}
if (k >= 0x46c00000) /* |x| >= 2**109. */
{
/* Saturate result to {-,+}pi/2. */
if (sign)
return -atantbl[83];
else
return atantbl[83];
}
if (sign)
x = -x;