Average Error: 30.1 → 0.8
Time: 27.8s
Precision: 64
\[\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\]
\[\begin{array}{l} \mathbf{if}\;x \le 45.88594712019421706372668268159031867981:\\ \;\;\;\;\frac{\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(1 + \frac{1}{\varepsilon}, e^{-\left(1 - \varepsilon\right) \cdot x}, -\frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}{2}\\ \end{array}\]
\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}
\begin{array}{l}
\mathbf{if}\;x \le 45.88594712019421706372668268159031867981:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)}{2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(1 + \frac{1}{\varepsilon}, e^{-\left(1 - \varepsilon\right) \cdot x}, -\frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}{2}\\

\end{array}
double f(double x, double eps) {
        double r67603 = 1.0;
        double r67604 = eps;
        double r67605 = r67603 / r67604;
        double r67606 = r67603 + r67605;
        double r67607 = r67603 - r67604;
        double r67608 = x;
        double r67609 = r67607 * r67608;
        double r67610 = -r67609;
        double r67611 = exp(r67610);
        double r67612 = r67606 * r67611;
        double r67613 = r67605 - r67603;
        double r67614 = r67603 + r67604;
        double r67615 = r67614 * r67608;
        double r67616 = -r67615;
        double r67617 = exp(r67616);
        double r67618 = r67613 * r67617;
        double r67619 = r67612 - r67618;
        double r67620 = 2.0;
        double r67621 = r67619 / r67620;
        return r67621;
}

double f(double x, double eps) {
        double r67622 = x;
        double r67623 = 45.88594712019422;
        bool r67624 = r67622 <= r67623;
        double r67625 = 2.0;
        double r67626 = pow(r67622, r67625);
        double r67627 = 0.6666666666666667;
        double r67628 = r67627 * r67622;
        double r67629 = 1.0;
        double r67630 = r67628 - r67629;
        double r67631 = 2.0;
        double r67632 = fma(r67626, r67630, r67631);
        double r67633 = r67632 / r67631;
        double r67634 = eps;
        double r67635 = r67629 / r67634;
        double r67636 = r67629 + r67635;
        double r67637 = r67629 - r67634;
        double r67638 = r67637 * r67622;
        double r67639 = -r67638;
        double r67640 = exp(r67639);
        double r67641 = r67635 - r67629;
        double r67642 = r67629 + r67634;
        double r67643 = r67642 * r67622;
        double r67644 = exp(r67643);
        double r67645 = r67641 / r67644;
        double r67646 = -r67645;
        double r67647 = fma(r67636, r67640, r67646);
        double r67648 = r67647 / r67631;
        double r67649 = r67624 ? r67633 : r67648;
        return r67649;
}

Error

Bits error versus x

Bits error versus eps

Derivation

  1. Split input into 2 regimes
  2. if x < 45.88594712019422

    1. Initial program 39.8

      \[\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\]
    2. Taylor expanded around 0 1.0

      \[\leadsto \frac{\color{blue}{\left(0.6666666666666667406815349750104360282421 \cdot {x}^{3} + 2\right) - 1 \cdot {x}^{2}}}{2}\]
    3. Simplified1.0

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right) - 1 \cdot {x}^{2}}}{2}\]
    4. Using strategy rm
    5. Applied add-cube-cbrt2.6

      \[\leadsto \frac{\color{blue}{\left(\sqrt[3]{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right)} \cdot \sqrt[3]{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right)}} - 1 \cdot {x}^{2}}{2}\]
    6. Applied prod-diff2.6

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\sqrt[3]{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right)} \cdot \sqrt[3]{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right)}, \sqrt[3]{\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, 2\right)}, -{x}^{2} \cdot 1\right) + \mathsf{fma}\left(-{x}^{2}, 1, {x}^{2} \cdot 1\right)}}{2}\]
    7. Simplified1.0

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)} + \mathsf{fma}\left(-{x}^{2}, 1, {x}^{2} \cdot 1\right)}{2}\]
    8. Simplified1.0

      \[\leadsto \frac{\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right) + \color{blue}{0}}{2}\]

    if 45.88594712019422 < x

    1. Initial program 0.3

      \[\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\]
    2. Using strategy rm
    3. Applied fma-neg0.3

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(1 + \frac{1}{\varepsilon}, e^{-\left(1 - \varepsilon\right) \cdot x}, -\left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}\right)}}{2}\]
    4. Simplified0.3

      \[\leadsto \frac{\mathsf{fma}\left(1 + \frac{1}{\varepsilon}, e^{-\left(1 - \varepsilon\right) \cdot x}, \color{blue}{-\frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}}\right)}{2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 45.88594712019421706372668268159031867981:\\ \;\;\;\;\frac{\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(1 + \frac{1}{\varepsilon}, e^{-\left(1 - \varepsilon\right) \cdot x}, -\frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}{2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019326 +o rules:numerics
(FPCore (x eps)
  :name "NMSE Section 6.1 mentioned, A"
  :precision binary64
  (/ (- (* (+ 1 (/ 1 eps)) (exp (- (* (- 1 eps) x)))) (* (- (/ 1 eps) 1) (exp (- (* (+ 1 eps) x))))) 2))