Average Error: 15.6 → 1.5
Time: 22.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)}\]
\[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 r4418717 = K;
        double r4418718 = m;
        double r4418719 = n;
        double r4418720 = r4418718 + r4418719;
        double r4418721 = r4418717 * r4418720;
        double r4418722 = 2.0;
        double r4418723 = r4418721 / r4418722;
        double r4418724 = M;
        double r4418725 = r4418723 - r4418724;
        double r4418726 = cos(r4418725);
        double r4418727 = r4418720 / r4418722;
        double r4418728 = r4418727 - r4418724;
        double r4418729 = pow(r4418728, r4418722);
        double r4418730 = -r4418729;
        double r4418731 = l;
        double r4418732 = r4418718 - r4418719;
        double r4418733 = fabs(r4418732);
        double r4418734 = r4418731 - r4418733;
        double r4418735 = r4418730 - r4418734;
        double r4418736 = exp(r4418735);
        double r4418737 = r4418726 * r4418736;
        return r4418737;
}

double f(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r4418738 = m;
        double r4418739 = n;
        double r4418740 = r4418738 - r4418739;
        double r4418741 = fabs(r4418740);
        double r4418742 = r4418739 + r4418738;
        double r4418743 = 2.0;
        double r4418744 = r4418742 / r4418743;
        double r4418745 = M;
        double r4418746 = r4418744 - r4418745;
        double r4418747 = l;
        double r4418748 = fma(r4418746, r4418746, r4418747);
        double r4418749 = r4418741 - r4418748;
        double r4418750 = exp(r4418749);
        return r4418750;
}

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 15.6

    \[\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. Simplified15.6

    \[\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.5

    \[\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.5

    \[\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 2019132 +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)))))))