Skip to content

Commit

Permalink
Fix pow (0.0, -Inf) (bug 14241).
Browse files Browse the repository at this point in the history
  • Loading branch information
Joseph Myers committed Jun 15, 2012
1 parent 06c5abb commit 10285c2
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 3 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 2 additions & 0 deletions math/libm-test.inc
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down
4 changes: 2 additions & 2 deletions sysdeps/ieee754/dbl-64/e_pow.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 10285c2

Please sign in to comment.