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;