Lines Matching defs:dx
53 // | output - (2^dx - 1) / dx | < 1.5 * 2^-52.
54 LIBC_INLINE double poly_approx_d(double dx) {
55 // dx^2
56 double dx2 = dx * dx;
58 fputil::multiply_add(dx, 0x1.ebfbdff82c58ep-3, 0x1.62e42fefa39efp-1);
60 fputil::multiply_add(dx, 0x1.3b2aba7a95a89p-7, 0x1.c6b08e8fc0c0ep-5);
69 // | output - 2^(dx) | < 2^-101
70 DoubleDouble poly_approx_dd(const DoubleDouble &dx) {
82 DoubleDouble p = fputil::polyeval(dx, COEFFS[0], COEFFS[1], COEFFS[2],
88 // Return exp(dx) ~ 1 + a0 * dx + a1 * dx^2 + ... + a6 * dx^7
89 // For |dx| < 2^-13 + 2^-30:
90 // | output - exp(dx) | < 2^-126.
91 Float128 poly_approx_f128(const Float128 &dx) {
103 Float128 p = fputil::polyeval(dx, COEFFS_128[0], COEFFS_128[1], COEFFS_128[2],
113 Float128 dx = Float128(x);
128 Float128 p = poly_approx_f128(dx);
139 DoubleDouble dx({0, x});
143 DoubleDouble p = poly_approx_dd(dx);
167 // |dx| < 2^-13 + 2^-30.
168 double dx = fputil::multiply_add(kd, -0x1.0p-12, x); // exact
170 double mid_lo = dx * exp_mid.hi;
172 // Approximate (2^dx - 1)/dx ~ 1 + a0*dx + a1*dx^2 + a2*dx^3 + a3*dx^4.
173 double p = poly_approx_d(dx);
182 DoubleDouble r_dd = exp2_double_double(dx, exp_mid);
189 Float128 r_f128 = exp2_f128(dx, hi, idx1, idx2);
334 // |dx| < 2^-13 + 2^-30.
335 double dx = fputil::multiply_add(kd, -0x1.0p-12, x); // exact
350 // (exp_mid.hi + exp_mid.lo) * (1 + dx * P_(dx)) ~
351 // ~ exp_mid.hi + (exp_mid.hi * dx * P_(dx) + exp_mid.lo)
354 double mid_lo = dx * exp_mid.hi;
356 // Approximate (2^dx - 1)/dx ~ 1 + a0*dx + a1*dx^2 + a2*dx^3 + a3*dx^4.
357 double p = poly_approx_d(dx);
373 DoubleDouble r_dd = exp2_double_double(dx, exp_mid);
387 Float128 r_f128 = exp2_f128(dx, hi, idx1, idx2);