Average Error: 29.6 → 1.1
Time: 22.0s
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 121.4869422814261525900292326696217060089:\\ \;\;\;\;\frac{2 + \left(x \cdot x\right) \cdot \left(0.6666666666666667406815349750104360282421 \cdot x - 1\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{\varepsilon} + 1, e^{\left(1 - \varepsilon\right) \cdot \left(-x\right)}, e^{\left(1 + \varepsilon\right) \cdot \left(-x\right)} \cdot \left(-\left(\frac{1}{\varepsilon} - 1\right)\right)\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 121.4869422814261525900292326696217060089:\\
\;\;\;\;\frac{2 + \left(x \cdot x\right) \cdot \left(0.6666666666666667406815349750104360282421 \cdot x - 1\right)}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r1617747 = 1.0;
        double r1617748 = eps;
        double r1617749 = r1617747 / r1617748;
        double r1617750 = r1617747 + r1617749;
        double r1617751 = r1617747 - r1617748;
        double r1617752 = x;
        double r1617753 = r1617751 * r1617752;
        double r1617754 = -r1617753;
        double r1617755 = exp(r1617754);
        double r1617756 = r1617750 * r1617755;
        double r1617757 = r1617749 - r1617747;
        double r1617758 = r1617747 + r1617748;
        double r1617759 = r1617758 * r1617752;
        double r1617760 = -r1617759;
        double r1617761 = exp(r1617760);
        double r1617762 = r1617757 * r1617761;
        double r1617763 = r1617756 - r1617762;
        double r1617764 = 2.0;
        double r1617765 = r1617763 / r1617764;
        return r1617765;
}

double f(double x, double eps) {
        double r1617766 = x;
        double r1617767 = 121.48694228142615;
        bool r1617768 = r1617766 <= r1617767;
        double r1617769 = 2.0;
        double r1617770 = r1617766 * r1617766;
        double r1617771 = 0.6666666666666667;
        double r1617772 = r1617771 * r1617766;
        double r1617773 = 1.0;
        double r1617774 = r1617772 - r1617773;
        double r1617775 = r1617770 * r1617774;
        double r1617776 = r1617769 + r1617775;
        double r1617777 = r1617776 / r1617769;
        double r1617778 = eps;
        double r1617779 = r1617773 / r1617778;
        double r1617780 = r1617779 + r1617773;
        double r1617781 = r1617773 - r1617778;
        double r1617782 = -r1617766;
        double r1617783 = r1617781 * r1617782;
        double r1617784 = exp(r1617783);
        double r1617785 = r1617773 + r1617778;
        double r1617786 = r1617785 * r1617782;
        double r1617787 = exp(r1617786);
        double r1617788 = r1617779 - r1617773;
        double r1617789 = -r1617788;
        double r1617790 = r1617787 * r1617789;
        double r1617791 = fma(r1617780, r1617784, r1617790);
        double r1617792 = r1617791 / r1617769;
        double r1617793 = r1617768 ? r1617777 : r1617792;
        return r1617793;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 39.5

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

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(\left(x \cdot x\right) \cdot x, 0.6666666666666667406815349750104360282421, 2 - \left(x \cdot x\right) \cdot 1\right)}}{2}\]
    4. Taylor expanded around 0 1.4

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

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

    if 121.48694228142615 < x

    1. Initial program 0.2

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

      \[\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}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.1

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

Reproduce

herbie shell --seed 2019171 +o rules:numerics
(FPCore (x eps)
  :name "NMSE Section 6.1 mentioned, A"
  (/ (- (* (+ 1.0 (/ 1.0 eps)) (exp (- (* (- 1.0 eps) x)))) (* (- (/ 1.0 eps) 1.0) (exp (- (* (+ 1.0 eps) x))))) 2.0))