Average Error: 15.4 → 1.4
Time: 1.2m
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 r14352969 = K;
        double r14352970 = m;
        double r14352971 = n;
        double r14352972 = r14352970 + r14352971;
        double r14352973 = r14352969 * r14352972;
        double r14352974 = 2.0;
        double r14352975 = r14352973 / r14352974;
        double r14352976 = M;
        double r14352977 = r14352975 - r14352976;
        double r14352978 = cos(r14352977);
        double r14352979 = r14352972 / r14352974;
        double r14352980 = r14352979 - r14352976;
        double r14352981 = pow(r14352980, r14352974);
        double r14352982 = -r14352981;
        double r14352983 = l;
        double r14352984 = r14352970 - r14352971;
        double r14352985 = fabs(r14352984);
        double r14352986 = r14352983 - r14352985;
        double r14352987 = r14352982 - r14352986;
        double r14352988 = exp(r14352987);
        double r14352989 = r14352978 * r14352988;
        return r14352989;
}

double f(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r14352990 = m;
        double r14352991 = n;
        double r14352992 = r14352990 - r14352991;
        double r14352993 = fabs(r14352992);
        double r14352994 = r14352991 + r14352990;
        double r14352995 = 2.0;
        double r14352996 = r14352994 / r14352995;
        double r14352997 = M;
        double r14352998 = r14352996 - r14352997;
        double r14352999 = l;
        double r14353000 = fma(r14352998, r14352998, r14352999);
        double r14353001 = r14352993 - r14353000;
        double r14353002 = exp(r14353001);
        return r14353002;
}

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.4

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

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

    \[\leadsto \frac{\color{blue}{1}}{e^{\mathsf{fma}\left(\left(\frac{m + n}{2} - M\right), \left(\frac{m + n}{2} - M\right), \ell\right) - \left|m - n\right|}}\]
  4. Using strategy rm
  5. Applied add-exp-log1.4

    \[\leadsto \frac{\color{blue}{e^{\log 1}}}{e^{\mathsf{fma}\left(\left(\frac{m + n}{2} - M\right), \left(\frac{m + n}{2} - M\right), \ell\right) - \left|m - n\right|}}\]
  6. Applied div-exp1.4

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

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

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