Average Error: 16.0 → 1.5
Time: 29.7s
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(\frac{m + n}{2} - M, \frac{m + n}{2} - M, \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(\frac{m + n}{2} - M, \frac{m + n}{2} - M, \ell\right)}
double f(double K, double m, double n, double M, double l) {
        double r4177483 = K;
        double r4177484 = m;
        double r4177485 = n;
        double r4177486 = r4177484 + r4177485;
        double r4177487 = r4177483 * r4177486;
        double r4177488 = 2.0;
        double r4177489 = r4177487 / r4177488;
        double r4177490 = M;
        double r4177491 = r4177489 - r4177490;
        double r4177492 = cos(r4177491);
        double r4177493 = r4177486 / r4177488;
        double r4177494 = r4177493 - r4177490;
        double r4177495 = pow(r4177494, r4177488);
        double r4177496 = -r4177495;
        double r4177497 = l;
        double r4177498 = r4177484 - r4177485;
        double r4177499 = fabs(r4177498);
        double r4177500 = r4177497 - r4177499;
        double r4177501 = r4177496 - r4177500;
        double r4177502 = exp(r4177501);
        double r4177503 = r4177492 * r4177502;
        return r4177503;
}

double f(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r4177504 = m;
        double r4177505 = n;
        double r4177506 = r4177504 - r4177505;
        double r4177507 = fabs(r4177506);
        double r4177508 = r4177504 + r4177505;
        double r4177509 = 2.0;
        double r4177510 = r4177508 / r4177509;
        double r4177511 = M;
        double r4177512 = r4177510 - r4177511;
        double r4177513 = l;
        double r4177514 = fma(r4177512, r4177512, r4177513);
        double r4177515 = r4177507 - r4177514;
        double r4177516 = exp(r4177515);
        return r4177516;
}

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 16.0

    \[\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. Simplified16.0

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

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

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

Reproduce

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