mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-10 19:30:10 +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>
|
2012-06-15 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
* manual/contrib.texi (Contributors): Update entry of Liubov
|
* 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,
|
13963, 13967, 13968, 13970, 13973, 13979, 13983, 13986, 13996, 14012,
|
||||||
14027, 14033, 14034, 14036, 14040, 14043, 14044, 14048, 14049, 14053,
|
14027, 14033, 14034, 14036, 14040, 14043, 14044, 14048, 14049, 14053,
|
||||||
14055, 14059, 14064, 14075, 14080, 14083, 14103, 14104, 14109, 14112,
|
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
|
* Support for the x32 ABI on x86-64 added. The x32 target is selected by
|
||||||
configuring glibc with:
|
configuring glibc with:
|
||||||
|
@ -6290,6 +6290,8 @@ pow_test (void)
|
|||||||
TEST_ff_f (pow, minus_zero, 11.1L, 0);
|
TEST_ff_f (pow, minus_zero, 11.1L, 0);
|
||||||
TEST_ff_f (pow, 0, plus_infty, 0);
|
TEST_ff_f (pow, 0, plus_infty, 0);
|
||||||
TEST_ff_f (pow, minus_zero, 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
|
#ifndef TEST_INLINE
|
||||||
/* pow (x, +inf) == +inf for |x| > 1. */
|
/* 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)
|
if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0)
|
||||||
|| (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000)
|
|| (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000)
|
||||||
return y;
|
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);
|
k = checkint(y);
|
||||||
if (k == -1)
|
if (k == -1)
|
||||||
return y < 0 ? 1.0/x : x;
|
return y < 0 ? 1.0/x : x;
|
||||||
else
|
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 */
|
qx = u.i[HIGH_HALF]&0x7fffffff; /* no sign */
|
||||||
|
Loading…
Reference in New Issue
Block a user