diff options
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | math/libm-test.inc | 8 | ||||
-rw-r--r-- | math/s_catan.c | 6 | ||||
-rw-r--r-- | math/s_catanf.c | 6 | ||||
-rw-r--r-- | math/s_catanh.c | 6 | ||||
-rw-r--r-- | math/s_catanhf.c | 6 | ||||
-rw-r--r-- | math/s_catanhl.c | 6 | ||||
-rw-r--r-- | math/s_catanl.c | 6 | ||||
-rw-r--r-- | sysdeps/i386/fpu/libm-test-ulps | 96 | ||||
-rw-r--r-- | sysdeps/ieee754/flt-32/e_logf.c | 2 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/libm-test-ulps | 96 |
12 files changed, 242 insertions, 14 deletions
@@ -1,5 +1,21 @@ 2014-04-02 Joseph Myers <joseph@codesourcery.com> + [BZ #16799] + [BZ #16800] + * math/s_catan.c (__catan): Avoid passing -0 denominator to atan2 + with 0 numerator. + * math/s_catanf.c (__catanf): Likewise. + * math/s_catanh.c (__catanh): Likewise. + * math/s_catanhf.c (__catanhf): Likewise. + * math/s_catanhl.c (__catanhl): Likewise. + * math/s_catanl.c (__catanl): Likewise. + * sysdeps/ieee754/flt-32/e_logf.c (__ieee754_logf): Always divide + by positive zero when computing -Inf result. + * math/libm-test.inc (catan_test): Use ALL_RM_TEST. + (catanh_test): Likewise. + * sysdeps/i386/fpu/libm-test-ulps: Update. + * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. + [BZ #16789] * math/s_clog.c (__clog): Use math_force_eval to ensure underflow instead of using underflowing value in computing result. @@ -14,7 +14,7 @@ Version 2.20 16611, 16613, 16623, 16632, 16634, 16639, 16642, 16648, 16649, 16670, 16674, 16677, 16680, 16683, 16689, 16695, 16701, 16706, 16707, 16712, 16713, 16714, 16731, 16739, 16743, 16758, 16759, 16760, 16770, 16786, - 16789. + 16789, 16799, 16800. * Running the testsuite no longer terminates as soon as a test fails. Instead, a file tests.sum (xtests.sum from "make xcheck") is generated, diff --git a/math/libm-test.inc b/math/libm-test.inc index c6279e7..5e6789f 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -5239,9 +5239,7 @@ static const struct test_c_c_data catan_test_data[] = static void catan_test (void) { - START (catan, 0); - RUN_TEST_LOOP_c_c (catan, catan_test_data, ); - END_COMPLEX; + ALL_RM_TEST (catan, 0, catan_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX); } static const struct test_c_c_data catanh_test_data[] = @@ -5746,9 +5744,7 @@ static const struct test_c_c_data catanh_test_data[] = static void catanh_test (void) { - START (catanh, 0); - RUN_TEST_LOOP_c_c (catanh, catanh_test_data, ); - END_COMPLEX; + ALL_RM_TEST (catanh, 0, catanh_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX); } static const struct test_f_f_data cbrt_test_data[] = diff --git a/math/s_catan.c b/math/s_catan.c index d6552d8..0cfa924 100644 --- a/math/s_catan.c +++ b/math/s_catan.c @@ -89,7 +89,11 @@ __catan (__complex__ double x) } if (absy < DBL_EPSILON / 2.0) - den = (1.0 - absx) * (1.0 + absx); + { + den = (1.0 - absx) * (1.0 + absx); + if (den == -0.0) + den = 0.0; + } else if (absx >= 1.0) den = (1.0 - absx) * (1.0 + absx) - absy * absy; else if (absx >= 0.75 || absy >= 0.5) diff --git a/math/s_catanf.c b/math/s_catanf.c index 41e419d..b478684 100644 --- a/math/s_catanf.c +++ b/math/s_catanf.c @@ -90,7 +90,11 @@ __catanf (__complex__ float x) } if (absy < FLT_EPSILON / 2.0f) - den = (1.0f - absx) * (1.0f + absx); + { + den = (1.0f - absx) * (1.0f + absx); + if (den == -0.0f) + den = 0.0f; + } else if (absx >= 1.0f) den = (1.0f - absx) * (1.0f + absx) - absy * absy; else if (absx >= 0.75f || absy >= 0.5f) diff --git a/math/s_catanh.c b/math/s_catanh.c index 2ba1298..7ef9142 100644 --- a/math/s_catanh.c +++ b/math/s_catanh.c @@ -110,7 +110,11 @@ __catanh (__complex__ double x) } if (absy < DBL_EPSILON / 2.0) - den = (1.0 - absx) * (1.0 + absx); + { + den = (1.0 - absx) * (1.0 + absx); + if (den == -0.0) + den = 0.0; + } else if (absx >= 1.0) den = (1.0 - absx) * (1.0 + absx) - absy * absy; else if (absx >= 0.75 || absy >= 0.5) diff --git a/math/s_catanhf.c b/math/s_catanhf.c index 0ee69a5..0e55aff 100644 --- a/math/s_catanhf.c +++ b/math/s_catanhf.c @@ -112,7 +112,11 @@ __catanhf (__complex__ float x) } if (absy < FLT_EPSILON / 2.0f) - den = (1.0f - absx) * (1.0f + absx); + { + den = (1.0f - absx) * (1.0f + absx); + if (den == -0.0f) + den = 0.0f; + } else if (absx >= 1.0f) den = (1.0f - absx) * (1.0f + absx) - absy * absy; else if (absx >= 0.75f || absy >= 0.5f) diff --git a/math/s_catanhl.c b/math/s_catanhl.c index 537bb3e..6410afe 100644 --- a/math/s_catanhl.c +++ b/math/s_catanhl.c @@ -118,7 +118,11 @@ __catanhl (__complex__ long double x) } if (absy < LDBL_EPSILON / 2.0L) - den = (1.0L - absx) * (1.0L + absx); + { + den = (1.0L - absx) * (1.0L + absx); + if (den == -0.0L) + den = 0.0L; + } else if (absx >= 1.0L) den = (1.0L - absx) * (1.0L + absx) - absy * absy; else if (absx >= 0.75L || absy >= 0.5L) diff --git a/math/s_catanl.c b/math/s_catanl.c index cea9282..dd01d16 100644 --- a/math/s_catanl.c +++ b/math/s_catanl.c @@ -97,7 +97,11 @@ __catanl (__complex__ long double x) } if (absy < LDBL_EPSILON / 2.0L) - den = (1.0L - absx) * (1.0L + absx); + { + den = (1.0L - absx) * (1.0L + absx); + if (den == -0.0L) + den = 0.0L; + } else if (absx >= 1.0L) den = (1.0L - absx) * (1.0L + absx) - absy * absy; else if (absx >= 0.75L || absy >= 0.5L) diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps index 0252d5b..aea6c51 100644 --- a/sysdeps/i386/fpu/libm-test-ulps +++ b/sysdeps/i386/fpu/libm-test-ulps @@ -383,6 +383,54 @@ ifloat: 1 ildouble: 1 ldouble: 1 +Function: Real part of "catan_downward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "catan_downward": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4 +ldouble: 4 + +Function: Real part of "catan_towardzero": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "catan_towardzero": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4 +ldouble: 4 + +Function: Real part of "catan_upward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "catan_upward": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 3 +ldouble: 3 + Function: Real part of "catanh": double: 1 float: 1 @@ -391,6 +439,54 @@ ifloat: 1 ildouble: 1 ldouble: 1 +Function: Real part of "catanh_downward": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4 +ldouble: 4 + +Function: Imaginary part of "catanh_downward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "catanh_towardzero": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4 +ldouble: 4 + +Function: Imaginary part of "catanh_towardzero": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "catanh_upward": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 4 +ldouble: 4 + +Function: Imaginary part of "catanh_upward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + Function: "cbrt": double: 1 idouble: 1 diff --git a/sysdeps/ieee754/flt-32/e_logf.c b/sysdeps/ieee754/flt-32/e_logf.c index 7da6489..cf75e11 100644 --- a/sysdeps/ieee754/flt-32/e_logf.c +++ b/sysdeps/ieee754/flt-32/e_logf.c @@ -41,7 +41,7 @@ __ieee754_logf(float x) k=0; if (ix < 0x00800000) { /* x < 2**-126 */ if (__builtin_expect((ix&0x7fffffff)==0, 0)) - return -two25/(x-x); /* log(+-0)=-inf */ + return -two25/zero; /* log(+-0)=-inf */ if (__builtin_expect(ix<0, 0)) return (x-x)/(x-x); /* log(-#) = NaN */ k -= 25; x *= two25; /* subnormal number, scale up x */ diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps index 1b6ebe2..4ba83a4 100644 --- a/sysdeps/x86_64/fpu/libm-test-ulps +++ b/sysdeps/x86_64/fpu/libm-test-ulps @@ -410,6 +410,54 @@ ifloat: 1 ildouble: 1 ldouble: 1 +Function: Real part of "catan_downward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "catan_downward": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 4 +ldouble: 4 + +Function: Real part of "catan_towardzero": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "catan_towardzero": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4 +ldouble: 4 + +Function: Real part of "catan_upward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "catan_upward": +double: 3 +float: 3 +idouble: 3 +ifloat: 3 +ildouble: 3 +ldouble: 3 + Function: Real part of "catanh": double: 1 float: 1 @@ -422,6 +470,54 @@ Function: Imaginary part of "catanh": float: 1 ifloat: 1 +Function: Real part of "catanh_downward": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 4 +ldouble: 4 + +Function: Imaginary part of "catanh_downward": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 1 +ldouble: 1 + +Function: Real part of "catanh_towardzero": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4 +ldouble: 4 + +Function: Imaginary part of "catanh_towardzero": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 1 +ldouble: 1 + +Function: Real part of "catanh_upward": +double: 4 +float: 3 +idouble: 4 +ifloat: 3 +ildouble: 4 +ldouble: 4 + +Function: Imaginary part of "catanh_upward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + Function: "cbrt": double: 1 float: 1 |