- r = x * y;
- r += x - 0.5L;
- return 0.5L - r;
- }
- if (ix < 0x3fffa000) { /* 0.84375 <= |x| < 1.25 */
- s = fabsl(x) - 1.0;
- P = pa[0] + s * (pa[1] + s * (pa[2] +
- s * (pa[3] + s * (pa[4] + s * (pa[5] + s * (pa[6] + s * pa[7]))))));
- Q = qa[0] + s * (qa[1] + s * (qa[2] +
- s * (qa[3] + s * (qa[4] + s * (qa[5] + s * (qa[6] + s))))));
- if ((se & 0x8000) == 0) {
- z = 1.0 - erx;
- return z - P / Q;
- }
- z = erx + P / Q;
- return 1.0 + z;
- }
- if (ix < 0x4005d600) { /* |x| < 107 */
- x = fabsl(x);
- s = 1.0 / (x * x);
- if (ix < 0x4000b6db) { /* 1.25 <= |x| < 2.85711669921875 ~ 1/.35 */
- R = ra[0] + s * (ra[1] + s * (ra[2] + s * (ra[3] + s * (ra[4] +
- s * (ra[5] + s * (ra[6] + s * (ra[7] + s * ra[8])))))));
- S = sa[0] + s * (sa[1] + s * (sa[2] + s * (sa[3] + s * (sa[4] +
- s * (sa[5] + s * (sa[6] + s * (sa[7] + s * (sa[8] + s))))))));
- } else if (ix < 0x4001d555) { /* 6.6666259765625 > |x| >= 1/.35 ~ 2.857143 */
- R = rb[0] + s * (rb[1] + s * (rb[2] + s * (rb[3] + s * (rb[4] +
- s * (rb[5] + s * (rb[6] + s * rb[7]))))));
- S = sb[0] + s * (sb[1] + s * (sb[2] + s * (sb[3] + s * (sb[4] +
- s * (sb[5] + s * (sb[6] + s))))));
- } else { /* 107 > |x| >= 6.666 */
- if (se & 0x8000)
- return 2.0 - tiny;/* x < -6.666 */
- R = rc[0] + s * (rc[1] + s * (rc[2] + s * (rc[3] +
- s * (rc[4] + s * rc[5]))));
- S = sc[0] + s * (sc[1] + s * (sc[2] + s * (sc[3] +
- s * (sc[4] + s))));
- }
- z = x;
- GET_LDOUBLE_WORDS(hx, i0, i1, z);
- i1 = 0;
- i0 &= 0xffffff00;
- SET_LDOUBLE_WORDS(z, hx, i0, i1);
- r = expl(-z * z - 0.5625) * expl((z - x) * (z + x) + R / S);
- if ((se & 0x8000) == 0)
- return r / x;
- return 2.0 - r / x;