diff options
author | Andreas Schwab <schwab@suse.de> | 2001-04-10 19:58:52 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2001-04-10 19:58:52 +0000 |
commit | d2784f806c372873fba6262e5c8164429afa4a06 (patch) | |
tree | a120f2f4b334ae0ffe865ea2083004edaa0e6461 /sysdeps/m68k/fpu/e_pow.c | |
parent | 9deee4bb2a7461507eb08acafef926d291beecc4 (diff) | |
download | glibc-d2784f806c372873fba6262e5c8164429afa4a06.tar.gz glibc-d2784f806c372873fba6262e5c8164429afa4a06.tar.xz glibc-d2784f806c372873fba6262e5c8164429afa4a06.zip |
* sysdeps/m68k/fpu/e_pow.c: Correct handling of some exceptional
values. * sysdeps/m68k/fpu/e_scalb.c: Likewise. 2001-04-10 Andreas Schwab <schwab@suse.de> * sysdeps/m68k/fpu/e_pow.c: Correct handling of some exceptional values. * sysdeps/m68k/fpu/e_scalb.c: Likewise.
Diffstat (limited to 'sysdeps/m68k/fpu/e_pow.c')
-rw-r--r-- | sysdeps/m68k/fpu/e_pow.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/sysdeps/m68k/fpu/e_pow.c b/sysdeps/m68k/fpu/e_pow.c index 3dc3d819ab..b461ad86c4 100644 --- a/sysdeps/m68k/fpu/e_pow.c +++ b/sysdeps/m68k/fpu/e_pow.c @@ -41,23 +41,25 @@ s(__ieee754_pow) (float_type x, float_type y) y_cond = __m81_test (y); if (y_cond & __M81_COND_ZERO) return 1.0; + if (y_cond & __M81_COND_NAN) + return x == 1.0 ? x : x + y; x_cond = __m81_test (x); - if ((x_cond | y_cond) & __M81_COND_NAN) + if (x_cond & __M81_COND_NAN) return x + y; if (y_cond & __M81_COND_INF) { ax = s(fabs) (x); - if (ax == 1) - return y - y; - if (ax > 1) + if (ax == 1.0) + return ax; + if (ax > 1.0) return y_cond & __M81_COND_NEG ? 0 : y; else return y_cond & __M81_COND_NEG ? -y : 0; } - if (s(fabs) (y) == 1) + if (s(fabs) (y) == 1.0) return y_cond & __M81_COND_NEG ? 1 / x : x; if (y == 2) @@ -77,7 +79,7 @@ s(__ieee754_pow) (float_type x, float_type y) } ax = s(fabs) (x); - if (x_cond & (__M81_COND_INF | __M81_COND_ZERO) || ax == 1) + if (x_cond & (__M81_COND_INF | __M81_COND_ZERO) || ax == 1.0) { z = ax; if (y_cond & __M81_COND_NEG) |