Average Error: 14.5 → 1.2
Time: 23.5s
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 r3284481 = K;
        double r3284482 = m;
        double r3284483 = n;
        double r3284484 = r3284482 + r3284483;
        double r3284485 = r3284481 * r3284484;
        double r3284486 = 2.0;
        double r3284487 = r3284485 / r3284486;
        double r3284488 = M;
        double r3284489 = r3284487 - r3284488;
        double r3284490 = cos(r3284489);
        double r3284491 = r3284484 / r3284486;
        double r3284492 = r3284491 - r3284488;
        double r3284493 = pow(r3284492, r3284486);
        double r3284494 = -r3284493;
        double r3284495 = l;
        double r3284496 = r3284482 - r3284483;
        double r3284497 = fabs(r3284496);
        double r3284498 = r3284495 - r3284497;
        double r3284499 = r3284494 - r3284498;
        double r3284500 = exp(r3284499);
        double r3284501 = r3284490 * r3284500;
        return r3284501;
}

double f(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r3284502 = 1.0;
        double r3284503 = m;
        double r3284504 = n;
        double r3284505 = r3284503 + r3284504;
        double r3284506 = 2.0;
        double r3284507 = r3284505 / r3284506;
        double r3284508 = M;
        double r3284509 = r3284507 - r3284508;
        double r3284510 = l;
        double r3284511 = fma(r3284509, r3284509, r3284510);
        double r3284512 = r3284503 - r3284504;
        double r3284513 = fabs(r3284512);
        double r3284514 = r3284511 - r3284513;
        double r3284515 = exp(r3284514);
        double r3284516 = r3284502 / r3284515;
        return r3284516;
}

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

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

    \[\leadsto \color{blue}{\frac{\cos \left(\frac{\left(m + n\right) \cdot K}{2} - 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.2

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

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