From d2784f806c372873fba6262e5c8164429afa4a06 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Tue, 10 Apr 2001 19:58:52 +0000 Subject: * sysdeps/m68k/fpu/e_pow.c: Correct handling of some exceptional values. * sysdeps/m68k/fpu/e_scalb.c: Likewise. 2001-04-10 Andreas Schwab * sysdeps/m68k/fpu/e_pow.c: Correct handling of some exceptional values. * sysdeps/m68k/fpu/e_scalb.c: Likewise. --- sysdeps/m68k/fpu/e_pow.c | 14 ++++++++------ sysdeps/m68k/fpu/e_scalb.c | 5 ++--- 2 files changed, 10 insertions(+), 9 deletions(-) (limited to 'sysdeps/m68k') diff --git a/sysdeps/m68k/fpu/e_pow.c b/sysdeps/m68k/fpu/e_pow.c index 3dc3d81..b461ad8 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) diff --git a/sysdeps/m68k/fpu/e_scalb.c b/sysdeps/m68k/fpu/e_scalb.c index 22332ca..7f56199 100644 --- a/sysdeps/m68k/fpu/e_scalb.c +++ b/sysdeps/m68k/fpu/e_scalb.c @@ -18,6 +18,7 @@ Boston, MA 02111-1307, USA. */ #include +#include "math_private.h" #include "mathimpl.h" #ifndef SUFF @@ -47,14 +48,12 @@ s(__ieee754_scalb) (float_type x, float_type fn) return x * fn; else if (x_cond & __M81_COND_ZERO) return x; - else if (x_cond & __M81_COND_INF) - return 0.0/0.0; else return x / -fn; } if (m81(__rint) (fn) != fn) - return 0.0/0.0; + return (x - x) / (x - x); __asm ("fscale%.x %1, %0" : "=f" (retval) : "f" (fn), "0" (x)); return retval; -- cgit v1.1