diff options
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) |