mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 03:10:05 +00:00
Fix pow (0.0, -Inf) (bug 14241).
This commit is contained in:
parent
06c5abbdf8
commit
10285c2113
@ -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
2
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:
|
||||
|
@ -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. */
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user