Print this page

        

@@ -103,11 +103,11 @@
 /* INDENT ON */
 
 double
 asin(double x) {
         double t, w, p, q, c, r, s;
-        int hx, ix;
+        int hx, ix, i;
 
         hx = ((int *) &x)[HIWORD];
         ix = hx & 0x7fffffff;
         if (ix >= 0x3ff00000) { /* |x| >= 1 */
                 if (((ix - 0x3ff00000) | ((int *) &x)[LOWORD]) == 0)

@@ -123,15 +123,14 @@
                 else
                         return _SVID_libm_err(x, x, 2);
         }
         else if (ix < 0x3fe00000) {     /* |x| < 0.5 */
                 if (ix < 0x3e400000) {  /* if |x| < 2**-27 */
-                        if (huge + x > one)
+                        if ((i = (int) x) == 0)
                                 return x;       /* return x with inexact if
                                                  * x != 0 */
                 }
-                else
                         t = x * x;
                 p = t * (pS0 + t * (pS1 + t * (pS2 + t * (pS3 +
                         t * (pS4 + t * pS5)))));
                 q = one + t * (qS1 + t * (qS2 + t * (qS3 + t * qS4)));
                 w = p / q;