Average Error: 14.9 → 1.3
Time: 24.4s
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)}\]
\[e^{\left|m - n\right| - \mathsf{fma}\left(\left(\frac{n + m}{2} - M\right), \left(\frac{n + m}{2} - M\right), \ell\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)}
e^{\left|m - n\right| - \mathsf{fma}\left(\left(\frac{n + m}{2} - M\right), \left(\frac{n + m}{2} - M\right), \ell\right)}
double f(double K, double m, double n, double M, double l) {
        double r2405376 = K;
        double r2405377 = m;
        double r2405378 = n;
        double r2405379 = r2405377 + r2405378;
        double r2405380 = r2405376 * r2405379;
        double r2405381 = 2.0;
        double r2405382 = r2405380 / r2405381;
        double r2405383 = M;
        double r2405384 = r2405382 - r2405383;
        double r2405385 = cos(r2405384);
        double r2405386 = r2405379 / r2405381;
        double r2405387 = r2405386 - r2405383;
        double r2405388 = pow(r2405387, r2405381);
        double r2405389 = -r2405388;
        double r2405390 = l;
        double r2405391 = r2405377 - r2405378;
        double r2405392 = fabs(r2405391);
        double r2405393 = r2405390 - r2405392;
        double r2405394 = r2405389 - r2405393;
        double r2405395 = exp(r2405394);
        double r2405396 = r2405385 * r2405395;
        return r2405396;
}

double f(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r2405397 = m;
        double r2405398 = n;
        double r2405399 = r2405397 - r2405398;
        double r2405400 = fabs(r2405399);
        double r2405401 = r2405398 + r2405397;
        double r2405402 = 2.0;
        double r2405403 = r2405401 / r2405402;
        double r2405404 = M;
        double r2405405 = r2405403 - r2405404;
        double r2405406 = l;
        double r2405407 = fma(r2405405, r2405405, r2405406);
        double r2405408 = r2405400 - r2405407;
        double r2405409 = exp(r2405408);
        return r2405409;
}

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}{e^{\left|m - n\right| - \mathsf{fma}\left(\left(\frac{m + n}{2} - M\right), \left(\frac{m + n}{2} - M\right), \ell\right)} \cdot \cos \left(K \cdot \frac{m + n}{2} - M\right)}\]
  3. Taylor expanded around 0 1.3

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

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

Reproduce

herbie shell --seed 2019133 +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)))))))