long double log10l(long double x) { long double z; long double y; int e; int64_t hx, lx; /* Test for domain */ GET_LDOUBLE_WORDS64 (hx, lx, x); if (((hx & 0x7fffffffffffffffLL) | lx) == 0) return (-1.0L / (x - x)); if (hx < 0) return (x - x) / (x - x); if (hx >= 0x7fff000000000000LL) return (x + x); /* separate mantissa from exponent */ /* Note, frexp is used so that denormal numbers * will be handled properly. */ x = frexpl (x, &e); /* logarithm using log(x) = z + z**3 P(z)/Q(z), * where z = 2(x-1)/x+1) */ if ((e > 2) || (e < -2)) { if (x < SQRTH) { /* 2( 2x-1 )/( 2x+1 ) */ e -= 1; z = x - 0.5L; y = 0.5L * z + 0.5L; } else { /* 2 (x-1)/(x+1) */ z = x - 0.5L; z -= 0.5L; y = 0.5L * x + 0.5L; } x = z / y; z = x * x; y = x * (z * neval (z, R, 5) / deval (z, S, 5)); goto done; } /* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */ if (x < SQRTH) { e -= 1; x = 2.0 * x - 1.0L; /* 2x - 1 */ } else { x = x - 1.0L; } z = x * x; y = x * (z * neval (x, P, 12) / deval (x, Q, 11)); y = y - 0.5 * z; done: /* Multiply log of fraction by log10(e) * and base 2 exponent by log10(2). */ z = y * L10EB; z += x * L10EB; z += e * L102B; z += y * L10EA; z += x * L10EA; z += e * L102A; return (z); }
__float128 log2q (__float128 x) { __float128 z; __float128 y; int e; int64_t hx, lx; /* Test for domain */ GET_FLT128_WORDS64 (hx, lx, x); if (((hx & 0x7fffffffffffffffLL) | lx) == 0) return (-1.0Q / fabsq (x)); /* log2l(+-0)=-inf */ if (hx < 0) return (x - x) / (x - x); if (hx >= 0x7fff000000000000LL) return (x + x); if (x == 1.0Q) return 0.0Q; /* separate mantissa from exponent */ /* Note, frexp is used so that denormal numbers * will be handled properly. */ x = frexpq (x, &e); /* logarithm using log(x) = z + z**3 P(z)/Q(z), * where z = 2(x-1)/x+1) */ if ((e > 2) || (e < -2)) { if (x < SQRTH) { /* 2( 2x-1 )/( 2x+1 ) */ e -= 1; z = x - 0.5Q; y = 0.5Q * z + 0.5Q; } else { /* 2 (x-1)/(x+1) */ z = x - 0.5Q; z -= 0.5Q; y = 0.5Q * x + 0.5Q; } x = z / y; z = x * x; y = x * (z * neval (z, R, 5) / deval (z, S, 5)); goto done; } /* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */ if (x < SQRTH) { e -= 1; x = 2.0 * x - 1.0Q; /* 2x - 1 */ } else { x = x - 1.0Q; } z = x * x; y = x * (z * neval (x, P, 12) / deval (x, Q, 11)); y = y - 0.5 * z; done: /* Multiply log of fraction by log2(e) * and base 2 exponent by 1 */ z = y * LOG2EA; z += x * LOG2EA; z += y; z += x; z += e; return (z); }
long double __ieee754_y1l (long double x) { long double xx, xinv, z, p, q, c, s, cc, ss; if (! __finitel (x)) { if (x != x) return x; else return 0.0L; } if (x <= 0.0L) { if (x < 0.0L) return (zero / (zero * x)); return -HUGE_VALL + x; } xx = fabsl (x); if (xx <= 2.0L) { /* 0 <= x <= 2 */ z = xx * xx; p = xx * neval (z, Y0_2N, NY0_2N) / deval (z, Y0_2D, NY0_2D); p = -TWOOPI / xx + p; p = TWOOPI * __ieee754_logl (x) * __ieee754_j1l (x) + p; return p; } xinv = 1.0L / xx; z = xinv * xinv; if (xinv <= 0.25) { if (xinv <= 0.125) { if (xinv <= 0.0625) { p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); } else { p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); } } else if (xinv <= 0.1875) { p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); } else { p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); } } /* .25 */ else /* if (xinv <= 0.5) */ { if (xinv <= 0.375) { if (xinv <= 0.3125) { p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); } else { p = neval (z, P2r7_3r2N, NP2r7_3r2N) / deval (z, P2r7_3r2D, NP2r7_3r2D); q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) / deval (z, Q2r7_3r2D, NQ2r7_3r2D); } } else if (xinv <= 0.4375) { p = neval (z, P2r3_2r7N, NP2r3_2r7N) / deval (z, P2r3_2r7D, NP2r3_2r7D); q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) / deval (z, Q2r3_2r7D, NQ2r3_2r7D); } else { p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); } } p = 1.0L + z * p; q = z * q; q = q * xinv + 0.375L * xinv; /* X = x - 3 pi/4 cos(X) = cos(x) cos(3 pi/4) + sin(x) sin(3 pi/4) = 1/sqrt(2) * (-cos(x) + sin(x)) sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4) = -1/sqrt(2) * (sin(x) + cos(x)) cf. Fdlibm. */ __sincosl (xx, &s, &c); ss = -s - c; cc = s - c; z = __cosl (xx + xx); if ((s * c) > 0) cc = z / ss; else ss = z / cc; z = ONEOSQPI * (p * ss + q * cc) / __ieee754_sqrtl (xx); return z; }
long double __ieee754_lgammal_r (long double x, int *signgamp) { long double p, q, w, z, nx; int i, nn; *signgamp = 1; if (! __finitel (x)) return x * x; if (x == 0.0L) { if (__signbitl (x)) *signgamp = -1; } if (x < 0.0L) { q = -x; p = __floorl (q); if (p == q) return (one / (p - p)); i = p; if ((i & 1) == 0) *signgamp = -1; else *signgamp = 1; if (q < 0x1p-120L) return -__logl (q); z = q - p; if (z > 0.5L) { p += 1.0L; z = p - q; } z = q * __sinl (PIL * z); w = __ieee754_lgammal_r (q, &i); z = __logl (PIL / z) - w; return (z); } if (x < 13.5L) { p = 0.0L; nx = __floorl (x + 0.5L); nn = nx; switch (nn) { case 0: /* log gamma (x + 1) = log(x) + log gamma(x) */ if (x < 0x1p-120L) return -__logl (x); else if (x <= 0.125) { p = x * neval (x, RN1, NRN1) / deval (x, RD1, NRD1); } else if (x <= 0.375) { z = x - 0.25L; p = z * neval (z, RN1r25, NRN1r25) / deval (z, RD1r25, NRD1r25); p += lgam1r25b; p += lgam1r25a; } else if (x <= 0.625) { z = x + (1.0L - x0a); z = z - x0b; p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); p = p * z * z; p = p + y0b; p = p + y0a; } else if (x <= 0.875) { z = x - 0.75L; p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); p += lgam1r75b; p += lgam1r75a; } else { z = x - 1.0L; p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); } p = p - __logl (x); break; case 1: if (x < 0.875L) { if (x <= 0.625) { z = x + (1.0L - x0a); z = z - x0b; p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); p = p * z * z; p = p + y0b; p = p + y0a; } else if (x <= 0.875) { z = x - 0.75L; p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); p += lgam1r75b; p += lgam1r75a; } else { z = x - 1.0L; p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); } p = p - __logl (x); } else if (x < 1.0L) { z = x - 1.0L; p = z * neval (z, RNr9, NRNr9) / deval (z, RDr9, NRDr9); } else if (x == 1.0L) p = 0.0L; else if (x <= 1.125L) { z = x - 1.0L; p = z * neval (z, RN1, NRN1) / deval (z, RD1, NRD1); } else if (x <= 1.375) { z = x - 1.25L; p = z * neval (z, RN1r25, NRN1r25) / deval (z, RD1r25, NRD1r25); p += lgam1r25b; p += lgam1r25a; } else { /* 1.375 <= x+x0 <= 1.625 */ z = x - x0a; z = z - x0b; p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); p = p * z * z; p = p + y0b; p = p + y0a; } break; case 2: if (x < 1.625L) { z = x - x0a; z = z - x0b; p = neval (z, RN1r5, NRN1r5) / deval (z, RD1r5, NRD1r5); p = p * z * z; p = p + y0b; p = p + y0a; } else if (x < 1.875L) { z = x - 1.75L; p = z * neval (z, RN1r75, NRN1r75) / deval (z, RD1r75, NRD1r75); p += lgam1r75b; p += lgam1r75a; } else if (x == 2.0L) p = 0.0L; else if (x < 2.375L) { z = x - 2.0L; p = z * neval (z, RN2, NRN2) / deval (z, RD2, NRD2); } else { z = x - 2.5L; p = z * neval (z, RN2r5, NRN2r5) / deval (z, RD2r5, NRD2r5); p += lgam2r5b; p += lgam2r5a; } break; case 3: if (x < 2.75) { z = x - 2.5L; p = z * neval (z, RN2r5, NRN2r5) / deval (z, RD2r5, NRD2r5); p += lgam2r5b; p += lgam2r5a; } else { z = x - 3.0L; p = z * neval (z, RN3, NRN3) / deval (z, RD3, NRD3); p += lgam3b; p += lgam3a; } break; case 4: z = x - 4.0L; p = z * neval (z, RN4, NRN4) / deval (z, RD4, NRD4); p += lgam4b; p += lgam4a; break; case 5: z = x - 5.0L; p = z * neval (z, RN5, NRN5) / deval (z, RD5, NRD5); p += lgam5b; p += lgam5a; break; case 6: z = x - 6.0L; p = z * neval (z, RN6, NRN6) / deval (z, RD6, NRD6); p += lgam6b; p += lgam6a; break; case 7: z = x - 7.0L; p = z * neval (z, RN7, NRN7) / deval (z, RD7, NRD7); p += lgam7b; p += lgam7a; break; case 8: z = x - 8.0L; p = z * neval (z, RN8, NRN8) / deval (z, RD8, NRD8); p += lgam8b; p += lgam8a; break; case 9: z = x - 9.0L; p = z * neval (z, RN9, NRN9) / deval (z, RD9, NRD9); p += lgam9b; p += lgam9a; break; case 10: z = x - 10.0L; p = z * neval (z, RN10, NRN10) / deval (z, RD10, NRD10); p += lgam10b; p += lgam10a; break; case 11: z = x - 11.0L; p = z * neval (z, RN11, NRN11) / deval (z, RD11, NRD11); p += lgam11b; p += lgam11a; break; case 12: z = x - 12.0L; p = z * neval (z, RN12, NRN12) / deval (z, RD12, NRD12); p += lgam12b; p += lgam12a; break; case 13: z = x - 13.0L; p = z * neval (z, RN13, NRN13) / deval (z, RD13, NRD13); p += lgam13b; p += lgam13a; break; } return p; } if (x > MAXLGM) return (*signgamp * huge * huge); q = ls2pi - x; q = (x - 0.5L) * __logl (x) + q; if (x > 1.0e18L) return (q); p = 1.0L / (x * x); q += neval (p, RASY, NRASY) / x; return (q); }
_Float128 __ieee754_y0l(_Float128 x) { _Float128 xx, xinv, z, p, q, c, s, cc, ss; if (! isfinite (x)) { if (x != x) return x + x; else return 0; } if (x <= 0) { if (x < 0) return (zero / (zero * x)); return -HUGE_VALL + x; } xx = fabsl (x); if (xx <= 0x1p-57) return U0 + TWOOPI * __ieee754_logl (x); if (xx <= 2) { /* 0 <= x <= 2 */ z = xx * xx; p = neval (z, Y0_2N, NY0_2N) / deval (z, Y0_2D, NY0_2D); p = TWOOPI * __ieee754_logl (x) * __ieee754_j0l (x) + p; return p; } /* X = x - pi/4 cos(X) = cos(x) cos(pi/4) + sin(x) sin(pi/4) = 1/sqrt(2) * (cos(x) + sin(x)) sin(X) = sin(x) cos(pi/4) - cos(x) sin(pi/4) = 1/sqrt(2) * (sin(x) - cos(x)) sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) cf. Fdlibm. */ __sincosl (x, &s, &c); ss = s - c; cc = s + c; if (xx <= LDBL_MAX / 2) { z = -__cosl (x + x); if ((s * c) < 0) cc = z / ss; else ss = z / cc; } if (xx > L(0x1p256)) return ONEOSQPI * ss / __ieee754_sqrtl (x); xinv = 1 / xx; z = xinv * xinv; if (xinv <= 0.25) { if (xinv <= 0.125) { if (xinv <= 0.0625) { p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); } else { p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); } } else if (xinv <= 0.1875) { p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); } else { p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); } } /* .25 */ else /* if (xinv <= 0.5) */ { if (xinv <= 0.375) { if (xinv <= 0.3125) { p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); } else { p = neval (z, P2r7_3r2N, NP2r7_3r2N) / deval (z, P2r7_3r2D, NP2r7_3r2D); q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) / deval (z, Q2r7_3r2D, NQ2r7_3r2D); } } else if (xinv <= 0.4375) { p = neval (z, P2r3_2r7N, NP2r3_2r7N) / deval (z, P2r3_2r7D, NP2r3_2r7D); q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) / deval (z, Q2r3_2r7D, NQ2r3_2r7D); } else { p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); } } p = 1 + z * p; q = z * xinv * q; q = q - L(0.125) * xinv; z = ONEOSQPI * (p * ss + q * cc) / __ieee754_sqrtl (x); return z; }
long double __ieee754_j0l (long double x) { long double xx, xinv, z, p, q, c, s, cc, ss; if (! isfinite (x)) { if (x != x) return x; else return 0.0L; } if (x == 0.0L) return 1.0L; xx = fabsl (x); if (xx <= 2.0L) { /* 0 <= x <= 2 */ z = xx * xx; p = z * z * neval (z, J0_2N, NJ0_2N) / deval (z, J0_2D, NJ0_2D); p -= 0.25L * z; p += 1.0L; return p; } /* X = x - pi/4 cos(X) = cos(x) cos(pi/4) + sin(x) sin(pi/4) = 1/sqrt(2) * (cos(x) + sin(x)) sin(X) = sin(x) cos(pi/4) - cos(x) sin(pi/4) = 1/sqrt(2) * (sin(x) - cos(x)) sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) cf. Fdlibm. */ __sincosl (xx, &s, &c); ss = s - c; cc = s + c; if (xx <= LDBL_MAX / 2.0L) { z = -__cosl (xx + xx); if ((s * c) < 0) cc = z / ss; else ss = z / cc; } if (xx > 0x1p256L) return ONEOSQPI * cc / __ieee754_sqrtl (xx); xinv = 1.0L / xx; z = xinv * xinv; if (xinv <= 0.25) { if (xinv <= 0.125) { if (xinv <= 0.0625) { p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); } else { p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); } } else if (xinv <= 0.1875) { p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); } else { p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); } } /* .25 */ else /* if (xinv <= 0.5) */ { if (xinv <= 0.375) { if (xinv <= 0.3125) { p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); } else { p = neval (z, P2r7_3r2N, NP2r7_3r2N) / deval (z, P2r7_3r2D, NP2r7_3r2D); q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) / deval (z, Q2r7_3r2D, NQ2r7_3r2D); } } else if (xinv <= 0.4375) { p = neval (z, P2r3_2r7N, NP2r3_2r7N) / deval (z, P2r3_2r7D, NP2r3_2r7D); q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) / deval (z, Q2r3_2r7D, NQ2r3_2r7D); } else { p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); } } p = 1.0L + z * p; q = z * xinv * q; q = q - 0.125L * xinv; z = ONEOSQPI * (p * cc - q * ss) / __ieee754_sqrtl (xx); return z; }
long double __ieee754_log2l (long double x) { long double z; long double y; int e; int64_t hx; double xhi; /* Test for domain */ xhi = ldbl_high (x); EXTRACT_WORDS64 (hx, xhi); if ((hx & 0x7fffffffffffffffLL) == 0) return (-1.0L / fabsl (x)); /* log2l(+-0)=-inf */ if (hx < 0) return (x - x) / (x - x); if (hx >= 0x7ff0000000000000LL) return (x + x); if (x == 1.0L) return 0.0L; /* separate mantissa from exponent */ /* Note, frexp is used so that denormal numbers * will be handled properly. */ x = __frexpl (x, &e); /* logarithm using log(x) = z + z**3 P(z)/Q(z), * where z = 2(x-1)/x+1) */ if ((e > 2) || (e < -2)) { if (x < SQRTH) { /* 2( 2x-1 )/( 2x+1 ) */ e -= 1; z = x - 0.5L; y = 0.5L * z + 0.5L; } else { /* 2 (x-1)/(x+1) */ z = x - 0.5L; z -= 0.5L; y = 0.5L * x + 0.5L; } x = z / y; z = x * x; y = x * (z * neval (z, R, 5) / deval (z, S, 5)); goto done; } /* logarithm using log(1+x) = x - .5x**2 + x**3 P(x)/Q(x) */ if (x < SQRTH) { e -= 1; x = 2.0 * x - 1.0L; /* 2x - 1 */ } else { x = x - 1.0L; } z = x * x; y = x * (z * neval (x, P, 12) / deval (x, Q, 11)); y = y - 0.5 * z; done: /* Multiply log of fraction by log2(e) * and base 2 exponent by 1 */ z = y * LOG2EA; z += x * LOG2EA; z += y; z += x; z += e; return (z); }
long double __ieee754_j1l (long double x) { long double xx, xinv, z, p, q, c, s, cc, ss; if (! isfinite (x)) { if (x != x) return x; else return 0.0L; } if (x == 0.0L) return x; xx = fabsl (x); if (xx <= 0x1p-58L) { long double ret = x * 0.5L; if (fabsl (ret) < LDBL_MIN) { long double force_underflow = ret * ret; math_force_eval (force_underflow); } return ret; } if (xx <= 2.0L) { /* 0 <= x <= 2 */ z = xx * xx; p = xx * z * neval (z, J0_2N, NJ0_2N) / deval (z, J0_2D, NJ0_2D); p += 0.5L * xx; if (x < 0) p = -p; return p; } /* X = x - 3 pi/4 cos(X) = cos(x) cos(3 pi/4) + sin(x) sin(3 pi/4) = 1/sqrt(2) * (-cos(x) + sin(x)) sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4) = -1/sqrt(2) * (sin(x) + cos(x)) cf. Fdlibm. */ __sincosl (xx, &s, &c); ss = -s - c; cc = s - c; if (xx <= LDBL_MAX / 2.0L) { z = __cosl (xx + xx); if ((s * c) > 0) cc = z / ss; else ss = z / cc; } if (xx > 0x1p256L) { z = ONEOSQPI * cc / __ieee754_sqrtl (xx); if (x < 0) z = -z; return z; } xinv = 1.0L / xx; z = xinv * xinv; if (xinv <= 0.25) { if (xinv <= 0.125) { if (xinv <= 0.0625) { p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID); q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID); } else { p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D); q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D); } } else if (xinv <= 0.1875) { p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D); q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D); } else { p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D); q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D); } } /* .25 */ else /* if (xinv <= 0.5) */ { if (xinv <= 0.375) { if (xinv <= 0.3125) { p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D); q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D); } else { p = neval (z, P2r7_3r2N, NP2r7_3r2N) / deval (z, P2r7_3r2D, NP2r7_3r2D); q = neval (z, Q2r7_3r2N, NQ2r7_3r2N) / deval (z, Q2r7_3r2D, NQ2r7_3r2D); } } else if (xinv <= 0.4375) { p = neval (z, P2r3_2r7N, NP2r3_2r7N) / deval (z, P2r3_2r7D, NP2r3_2r7D); q = neval (z, Q2r3_2r7N, NQ2r3_2r7N) / deval (z, Q2r3_2r7D, NQ2r3_2r7D); } else { p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D); q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D); } } p = 1.0L + z * p; q = z * q; q = q * xinv + 0.375L * xinv; z = ONEOSQPI * (p * cc - q * ss) / __ieee754_sqrtl (xx); if (x < 0) z = -z; return z; }