]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Distinguish error cases for x is +0 or -0.
authorUlrich Drepper <drepper@redhat.com>
Mon, 17 Mar 1997 04:09:18 +0000 (04:09 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 17 Mar 1997 04:09:18 +0000 (04:09 +0000)
sysdeps/libm-ieee754/w_pow.c
sysdeps/libm-ieee754/w_powf.c
sysdeps/libm-ieee754/w_powl.c

index ea19e1f55413edfc50abb7f446979de67d70aa9b..1711d71bda0d796b7d6e1cb685eaeb8c93f9d186 100644 (file)
            if(y==0.0)
                return __kernel_standard(x,y,20); /* pow(0.0,0.0) */
            if(__finite(y)&&y<0.0)
-               return __kernel_standard(x,y,23); /* pow(0.0,negative) */
+             if (signbit (x) && signbit (z))
+               return __kernel_standard(x,y,23); /* pow(-0.0,negative) */
+             else
+               return __kernel_standard(x,y,43); /* pow(+0.0,negative) */
            return z;
        }
        if(!__finite(z)) {
index 3f9d5c8d5fda1f51501399f28d483a8b2c223c22..0b20822be8fd57de27409672077c31c0a33c2669 100644 (file)
@@ -8,7 +8,7 @@
  *
  * Developed at SunPro, a Sun Microsystems, Inc. business.
  * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice 
+ * software is freely granted, provided that this notice
  * is preserved.
  * ====================================================
  */
@@ -17,7 +17,7 @@
 static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $";
 #endif
 
-/* 
+/*
  * wrapper powf(x,y) return x**y
  */
 
@@ -39,19 +39,22 @@ static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $";
        z=__ieee754_powf(x,y);
        if(_LIB_VERSION == _IEEE_|| __isnanf(y)) return z;
        if(__isnanf(x)) {
-           if(y==(float)0.0) 
+           if(y==(float)0.0)
                /* powf(NaN,0.0) */
                return (float)__kernel_standard((double)x,(double)y,142);
-           else 
+           else
                return z;
        }
-       if(x==(float)0.0){ 
+       if(x==(float)0.0){
            if(y==(float)0.0)
                /* powf(0.0,0.0) */
                return (float)__kernel_standard((double)x,(double)y,120);
            if(__finitef(y)&&y<(float)0.0)
+             if (signbit (x) && signbit (z))
                /* powf(0.0,negative) */
                return (float)__kernel_standard((double)x,(double)y,123);
+             else
+               return (float)__kernel_standard((double)x,(double)y,143);
            return z;
        }
        if(!__finitef(z)) {
@@ -59,11 +62,11 @@ static char rcsid[] = "$NetBSD: w_powf.c,v 1.3 1995/05/10 20:49:41 jtc Exp $";
                if(__isnanf(z))
                    /* powf neg**non-int */
                    return (float)__kernel_standard((double)x,(double)y,124);
-               else 
+               else
                    /* powf overflow */
                    return (float)__kernel_standard((double)x,(double)y,121);
            }
-       } 
+       }
        if(z==(float)0.0&&__finitef(x)&&__finitef(y))
            /* powf underflow */
            return (float)__kernel_standard((double)x,(double)y,122);
index 019664e0f11698b24a2a8dbf76ae57fcdcdda71b..aea572d905b430b65519c2846ebca7479f63d5eb 100644 (file)
            if(y==0.0)
                return __kernel_standard(x,y,220); /* pow(0.0,0.0) */
            if(__finite(y)&&y<0.0)
-               return __kernel_standard(x,y,223); /* pow(0.0,negative) */
+             if (signbit (x) && signbit (z))
+               return __kernel_standard(x,y,223); /* pow(-0.0,negative) */
+             else
+               return __kernel_standard(x,y,243); /* pow(+0.0,negative) */
            return z;
        }
        if(!__finitel(z)) {