about summary refs log tree commit diff
path: root/sysdeps/m68k/fpu/e_pow.c
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2001-04-10 19:58:52 +0000
committerAndreas Schwab <schwab@suse.de>2001-04-10 19:58:52 +0000
commitd2784f806c372873fba6262e5c8164429afa4a06 (patch)
treea120f2f4b334ae0ffe865ea2083004edaa0e6461 /sysdeps/m68k/fpu/e_pow.c
parent9deee4bb2a7461507eb08acafef926d291beecc4 (diff)
downloadglibc-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.c14
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)