Fix pow (0.0, -Inf) (bug 14241).
authorJoseph Myers <joseph@codesourcery.com>
Fri, 15 Jun 2012 11:27:51 +0000 (11:27 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Fri, 15 Jun 2012 11:27:51 +0000 (11:27 +0000)
ChangeLog
NEWS
math/libm-test.inc
sysdeps/ieee754/dbl-64/e_pow.c

index f63229275e6ccb98b44115c0f0590fda510c2286..f066a88491bd9636973779737cc31a91b52bd971 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-06-15  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #14241]
+       * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Use 0.0 instead
+       of ABS(x) in calculating zero to negative powers other than odd
+       integers.
+       * math/libm-test.inc (pow_test): Add more tests.
+
 2012-06-15  Andreas Jaeger  <aj@suse.de>
 
        * manual/contrib.texi (Contributors): Update entry of Liubov
diff --git a/NEWS b/NEWS
index 91b26448dcd1525440e465c71e6541c57fe8511f..96b351c30619dc21f1f3c3ef1a75d87407ce301e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -29,7 +29,7 @@ Version 2.16
   13963, 13967, 13968, 13970, 13973, 13979, 13983, 13986, 13996, 14012,
   14027, 14033, 14034, 14036, 14040, 14043, 14044, 14048, 14049, 14053,
   14055, 14059, 14064, 14075, 14080, 14083, 14103, 14104, 14109, 14112,
-  14122, 14123, 14134, 14153, 14183, 14188, 14199, 14210, 14218
+  14122, 14123, 14134, 14153, 14183, 14188, 14199, 14210, 14218, 14241
 
 * Support for the x32 ABI on x86-64 added.  The x32 target is selected by
   configuring glibc with:
index d32dde34a54a4fe20e6c91a2f91e47382c973724..8e4d02e76a1ee9e9e5f98f51b47217ef6367b6b8 100644 (file)
@@ -6290,6 +6290,8 @@ pow_test (void)
   TEST_ff_f (pow, minus_zero, 11.1L, 0);
   TEST_ff_f (pow, 0, plus_infty, 0);
   TEST_ff_f (pow, minus_zero, plus_infty, 0);
+  TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
+  TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
 
 #ifndef TEST_INLINE
   /* pow (x, +inf) == +inf for |x| > 1.  */
index 6c41af93ba4b732ea9951ebcf4b89178d534e135..3fd5e6507f05d9b4bdcc2c9fa6c75fddea94d9ff 100644 (file)
@@ -112,12 +112,12 @@ __ieee754_pow(double x, double y) {
     if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0)
        || (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000)
       return y;
-    if (ABS(y) > 1.0e20) return (y>0)?0:1.0/ABS(x);
+    if (ABS(y) > 1.0e20) return (y>0)?0:1.0/0.0;
     k = checkint(y);
     if (k == -1)
       return y < 0 ? 1.0/x : x;
     else
-      return y < 0 ? 1.0/ABS(x) : 0.0;                               /* return 0 */
+      return y < 0 ? 1.0/0.0 : 0.0;                               /* return 0 */
   }
 
   qx = u.i[HIGH_HALF]&0x7fffffff;  /*   no sign   */