math: fix pow(0,-inf) to raise divbyzero flag
authorSzabolcs Nagy <nsz@port70.net>
Thu, 15 Aug 2013 10:08:45 +0000 (10:08 +0000)
committerSzabolcs Nagy <nsz@port70.net>
Thu, 15 Aug 2013 10:08:45 +0000 (10:08 +0000)
src/math/pow.c
src/math/powf.c

index f257814eade388e88f059edff29adfc014a3b637..ac3abc0fdbb81b4d4d4f082ac62f6521a920e6cb 100644 (file)
@@ -143,7 +143,7 @@ double pow(double x, double y)
                                return 1.0;
                        else if (ix >= 0x3ff00000) /* (|x|>1)**+-inf = inf,0 */
                                return hy >= 0 ? y : 0.0;
-                       else                       /* (|x|<1)**+-inf = 0,inf */
+                       else if ((ix|lx) != 0)     /* (|x|<1)**+-inf = 0,inf if x!=0 */
                                return hy >= 0 ? 0.0 : -y;
                }
                if (iy == 0x3ff00000)    /* y is +-1 */
index 427c8965b9e8e78bca69660427a4e313087c3e0a..59baf6f3809cf0b9dfa9d6d55442c86a41e058fd 100644 (file)
@@ -90,7 +90,7 @@ float powf(float x, float y)
                        return 1.0f;
                else if (ix > 0x3f800000)  /* (|x|>1)**+-inf = inf,0 */
                        return hy >= 0 ? y : 0.0f;
-               else                       /* (|x|<1)**+-inf = 0,inf */
+               else if (ix != 0)          /* (|x|<1)**+-inf = 0,inf if x!=0 */
                        return hy >= 0 ? 0.0f: -y;
        }
        if (iy == 0x3f800000)    /* y is +-1 */