Fix pow (0.0, -Inf) (bug 14241).

This commit is contained in:
Joseph Myers 2012-06-15 11:27:51 +00:00
parent 06c5abbdf8
commit 10285c2113
4 changed files with 13 additions and 3 deletions

View File

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

2
NEWS
View File

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

View 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. */

View 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 */