Lines Matching defs:dx
59 // Return expm1(dx) / x ~ 1 + dx / 2 + dx^2 / 6 + dx^3 / 24.
60 // For |dx| < 2^-13 + 2^-30:
61 // | output - expm1(dx) / dx | < 2^-51.
62 LIBC_INLINE double poly_approx_d(double dx) {
63 // dx^2
64 double dx2 = dx * dx;
65 // c0 = 1 + dx / 2
66 double c0 = fputil::multiply_add(dx, 0.5, 1.0);
67 // c1 = 1/6 + dx / 24
69 fputil::multiply_add(dx, 0x1.5555555555555p-5, 0x1.5555555555555p-3);
70 // p = dx^2 * c1 + c0 = 1 + dx / 2 + dx^2 / 6 + dx^3 / 24
76 // Return exp(dx) ~ 1 + dx + dx^2 / 2 + ... + dx^6 / 720
77 // For |dx| < 2^-13 + 2^-30:
78 // | output - exp(dx) | < 2^-101
79 DoubleDouble poly_approx_dd(const DoubleDouble &dx) {
91 DoubleDouble p = fputil::polyeval(dx, COEFFS[0], COEFFS[1], COEFFS[2],
97 // Return exp(dx) ~ 1 + dx + dx^2 / 2 + ... + dx^7 / 5040
98 // For |dx| < 2^-13 + 2^-30:
99 // | output - exp(dx) | < 2^-126.
100 Float128 poly_approx_f128(const Float128 &dx) {
112 Float128 p = fputil::polyeval(dx, COEFFS_128[0], COEFFS_128[1], COEFFS_128[2],
122 // Recalculate dx:
128 Float128 dx = fputil::quick_add(
144 Float128 p = poly_approx_f128(dx);
156 // Recalculate dx:
157 // dx = x - k * 2^-12 * log(2)
162 DoubleDouble dx = fputil::exact_add(t1, t2);
163 dx.lo += t3;
167 DoubleDouble p = poly_approx_dd(dx);
345 // |x - (hi + mid1 + mid2) * log(2) - dx| < 2^11 * eps(M_LOG_2_EXP2_M12.lo)
348 // |dx| < 2^-13 + 2^-30.
350 double dx = fputil::multiply_add(kd, MLOG_2_EXP2_M12_MID, lo_h);
359 // |P_(dx) - P(dx)| < 2^-51
360 // => |dx * P_(dx) - expm1(lo) | < 1.5 * 2^-64
361 // => 2^(mid1 + mid2) * |dx * P_(dx) - expm1(lo)| < 1.5 * 2^-63.
365 // (exp_mid.hi + exp_mid.lo) * (1 + dx * P_(dx)) ~
366 // ~ exp_mid.hi + (exp_mid.hi * dx * P_(dx) + exp_mid.lo)
369 double mid_lo = dx * exp_mid.hi;
371 // Approximate expm1(dx)/dx ~ 1 + dx / 2 + dx^2 / 6 + dx^3 / 24.
372 double p = poly_approx_d(dx);