Average Error: 14.9 → 1.5
Time: 54.6s
Precision: 64
\[\cos \left(\frac{K \cdot \left(m + n\right)}{2} - M\right) \cdot e^{\left(-{\left(\frac{m + n}{2} - M\right)}^{2}\right) - \left(\ell - \left|m - n\right|\right)}\]
\[\frac{1}{e^{\mathsf{fma}\left(\frac{m + n}{2} - M, \frac{m + n}{2} - M, \ell\right) - \left|m - n\right|}}\]
\cos \left(\frac{K \cdot \left(m + n\right)}{2} - M\right) \cdot e^{\left(-{\left(\frac{m + n}{2} - M\right)}^{2}\right) - \left(\ell - \left|m - n\right|\right)}
\frac{1}{e^{\mathsf{fma}\left(\frac{m + n}{2} - M, \frac{m + n}{2} - M, \ell\right) - \left|m - n\right|}}
double f(double K, double m, double n, double M, double l) {
        double r3409537 = K;
        double r3409538 = m;
        double r3409539 = n;
        double r3409540 = r3409538 + r3409539;
        double r3409541 = r3409537 * r3409540;
        double r3409542 = 2.0;
        double r3409543 = r3409541 / r3409542;
        double r3409544 = M;
        double r3409545 = r3409543 - r3409544;
        double r3409546 = cos(r3409545);
        double r3409547 = r3409540 / r3409542;
        double r3409548 = r3409547 - r3409544;
        double r3409549 = pow(r3409548, r3409542);
        double r3409550 = -r3409549;
        double r3409551 = l;
        double r3409552 = r3409538 - r3409539;
        double r3409553 = fabs(r3409552);
        double r3409554 = r3409551 - r3409553;
        double r3409555 = r3409550 - r3409554;
        double r3409556 = exp(r3409555);
        double r3409557 = r3409546 * r3409556;
        return r3409557;
}

double f(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r3409558 = 1.0;
        double r3409559 = m;
        double r3409560 = n;
        double r3409561 = r3409559 + r3409560;
        double r3409562 = 2.0;
        double r3409563 = r3409561 / r3409562;
        double r3409564 = M;
        double r3409565 = r3409563 - r3409564;
        double r3409566 = l;
        double r3409567 = fma(r3409565, r3409565, r3409566);
        double r3409568 = r3409559 - r3409560;
        double r3409569 = fabs(r3409568);
        double r3409570 = r3409567 - r3409569;
        double r3409571 = exp(r3409570);
        double r3409572 = r3409558 / r3409571;
        return r3409572;
}

Error

Bits error versus K

Bits error versus m

Bits error versus n

Bits error versus M

Bits error versus l

Derivation

  1. Initial program 14.9

    \[\cos \left(\frac{K \cdot \left(m + n\right)}{2} - M\right) \cdot e^{\left(-{\left(\frac{m + n}{2} - M\right)}^{2}\right) - \left(\ell - \left|m - n\right|\right)}\]
  2. Simplified14.9

    \[\leadsto \color{blue}{\frac{\cos \left(\frac{K}{\frac{2}{m + n}} - M\right)}{e^{\mathsf{fma}\left(\frac{m + n}{2} - M, \frac{m + n}{2} - M, \ell\right) - \left|m - n\right|}}}\]
  3. Taylor expanded around 0 1.5

    \[\leadsto \frac{\color{blue}{1}}{e^{\mathsf{fma}\left(\frac{m + n}{2} - M, \frac{m + n}{2} - M, \ell\right) - \left|m - n\right|}}\]
  4. Final simplification1.5

    \[\leadsto \frac{1}{e^{\mathsf{fma}\left(\frac{m + n}{2} - M, \frac{m + n}{2} - M, \ell\right) - \left|m - n\right|}}\]

Reproduce

herbie shell --seed 2019154 +o rules:numerics
(FPCore (K m n M l)
  :name "Maksimov and Kolovsky, Equation (32)"
  (* (cos (- (/ (* K (+ m n)) 2) M)) (exp (- (- (pow (- (/ (+ m n) 2) M) 2)) (- l (fabs (- m n)))))))