Average Error: 15.3 → 2.0
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)}\]
\[\begin{array}{l} \mathbf{if}\;K \le -4.0776803569038904 \cdot 10^{+82}:\\ \;\;\;\;e^{\left(-{\left(\frac{n + m}{2} - M\right)}^{2}\right) - \left(\left(\ell - \left|m - n\right|\right)\right)}\\ \mathbf{elif}\;K \le 4874821.850288491:\\ \;\;\;\;e^{\left(-{\left(\frac{n + m}{2} - M\right)}^{2}\right) - \left(\ell - \left|m - n\right|\right)} \cdot \cos \left(\left(\sqrt[3]{\frac{K \cdot \left(n + m\right)}{2}} \cdot \sqrt[3]{\frac{K \cdot \left(n + m\right)}{2}}\right) \cdot \sqrt[3]{\frac{K \cdot \left(n + m\right)}{2}} - M\right)\\ \mathbf{else}:\\ \;\;\;\;e^{\left(-{\left(\frac{n + m}{2} - M\right)}^{2}\right) - \left(\left(\ell - \left|m - n\right|\right)\right)}\\ \end{array}\]
\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)}
\begin{array}{l}
\mathbf{if}\;K \le -4.0776803569038904 \cdot 10^{+82}:\\
\;\;\;\;e^{\left(-{\left(\frac{n + m}{2} - M\right)}^{2}\right) - \left(\left(\ell - \left|m - n\right|\right)\right)}\\

\mathbf{elif}\;K \le 4874821.850288491:\\
\;\;\;\;e^{\left(-{\left(\frac{n + m}{2} - M\right)}^{2}\right) - \left(\ell - \left|m - n\right|\right)} \cdot \cos \left(\left(\sqrt[3]{\frac{K \cdot \left(n + m\right)}{2}} \cdot \sqrt[3]{\frac{K \cdot \left(n + m\right)}{2}}\right) \cdot \sqrt[3]{\frac{K \cdot \left(n + m\right)}{2}} - M\right)\\

\mathbf{else}:\\
\;\;\;\;e^{\left(-{\left(\frac{n + m}{2} - M\right)}^{2}\right) - \left(\left(\ell - \left|m - n\right|\right)\right)}\\

\end{array}
double f(double K, double m, double n, double M, double l) {
        double r1353470 = K;
        double r1353471 = m;
        double r1353472 = n;
        double r1353473 = r1353471 + r1353472;
        double r1353474 = r1353470 * r1353473;
        double r1353475 = 2.0;
        double r1353476 = r1353474 / r1353475;
        double r1353477 = M;
        double r1353478 = r1353476 - r1353477;
        double r1353479 = cos(r1353478);
        double r1353480 = r1353473 / r1353475;
        double r1353481 = r1353480 - r1353477;
        double r1353482 = pow(r1353481, r1353475);
        double r1353483 = -r1353482;
        double r1353484 = l;
        double r1353485 = r1353471 - r1353472;
        double r1353486 = fabs(r1353485);
        double r1353487 = r1353484 - r1353486;
        double r1353488 = r1353483 - r1353487;
        double r1353489 = exp(r1353488);
        double r1353490 = r1353479 * r1353489;
        return r1353490;
}

double f(double K, double m, double n, double M, double l) {
        double r1353491 = K;
        double r1353492 = -4.0776803569038904e+82;
        bool r1353493 = r1353491 <= r1353492;
        double r1353494 = n;
        double r1353495 = m;
        double r1353496 = r1353494 + r1353495;
        double r1353497 = 2.0;
        double r1353498 = r1353496 / r1353497;
        double r1353499 = M;
        double r1353500 = r1353498 - r1353499;
        double r1353501 = pow(r1353500, r1353497);
        double r1353502 = -r1353501;
        double r1353503 = l;
        double r1353504 = r1353495 - r1353494;
        double r1353505 = fabs(r1353504);
        double r1353506 = r1353503 - r1353505;
        double r1353507 = /* ERROR: no posit support in C */;
        double r1353508 = /* ERROR: no posit support in C */;
        double r1353509 = r1353502 - r1353508;
        double r1353510 = exp(r1353509);
        double r1353511 = 4874821.850288491;
        bool r1353512 = r1353491 <= r1353511;
        double r1353513 = r1353502 - r1353506;
        double r1353514 = exp(r1353513);
        double r1353515 = r1353491 * r1353496;
        double r1353516 = r1353515 / r1353497;
        double r1353517 = cbrt(r1353516);
        double r1353518 = r1353517 * r1353517;
        double r1353519 = r1353518 * r1353517;
        double r1353520 = r1353519 - r1353499;
        double r1353521 = cos(r1353520);
        double r1353522 = r1353514 * r1353521;
        double r1353523 = r1353512 ? r1353522 : r1353510;
        double r1353524 = r1353493 ? r1353510 : r1353523;
        return r1353524;
}

Error

Bits error versus K

Bits error versus m

Bits error versus n

Bits error versus M

Bits error versus l

Derivation

  1. Split input into 2 regimes
  2. if K < -4.0776803569038904e+82 or 4874821.850288491 < K

    1. Initial program 33.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. Taylor expanded around 0 2.8

      \[\leadsto \color{blue}{1} \cdot e^{\left(-{\left(\frac{m + n}{2} - M\right)}^{2}\right) - \left(\ell - \left|m - n\right|\right)}\]
    3. Using strategy rm
    4. Applied insert-posit163.2

      \[\leadsto 1 \cdot e^{\left(-{\left(\frac{m + n}{2} - M\right)}^{2}\right) - \color{blue}{\left(\left(\ell - \left|m - n\right|\right)\right)}}\]

    if -4.0776803569038904e+82 < K < 4874821.850288491

    1. Initial program 1.1

      \[\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. Using strategy rm
    3. Applied add-cube-cbrt1.1

      \[\leadsto \cos \left(\color{blue}{\left(\sqrt[3]{\frac{K \cdot \left(m + n\right)}{2}} \cdot \sqrt[3]{\frac{K \cdot \left(m + n\right)}{2}}\right) \cdot \sqrt[3]{\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)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification2.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;K \le -4.0776803569038904 \cdot 10^{+82}:\\ \;\;\;\;e^{\left(-{\left(\frac{n + m}{2} - M\right)}^{2}\right) - \left(\left(\ell - \left|m - n\right|\right)\right)}\\ \mathbf{elif}\;K \le 4874821.850288491:\\ \;\;\;\;e^{\left(-{\left(\frac{n + m}{2} - M\right)}^{2}\right) - \left(\ell - \left|m - n\right|\right)} \cdot \cos \left(\left(\sqrt[3]{\frac{K \cdot \left(n + m\right)}{2}} \cdot \sqrt[3]{\frac{K \cdot \left(n + m\right)}{2}}\right) \cdot \sqrt[3]{\frac{K \cdot \left(n + m\right)}{2}} - M\right)\\ \mathbf{else}:\\ \;\;\;\;e^{\left(-{\left(\frac{n + m}{2} - M\right)}^{2}\right) - \left(\left(\ell - \left|m - n\right|\right)\right)}\\ \end{array}\]

Reproduce

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