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

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

\end{array}
double f(double x, double eps) {
        double r29809 = 1.0;
        double r29810 = eps;
        double r29811 = r29809 / r29810;
        double r29812 = r29809 + r29811;
        double r29813 = r29809 - r29810;
        double r29814 = x;
        double r29815 = r29813 * r29814;
        double r29816 = -r29815;
        double r29817 = exp(r29816);
        double r29818 = r29812 * r29817;
        double r29819 = r29811 - r29809;
        double r29820 = r29809 + r29810;
        double r29821 = r29820 * r29814;
        double r29822 = -r29821;
        double r29823 = exp(r29822);
        double r29824 = r29819 * r29823;
        double r29825 = r29818 - r29824;
        double r29826 = 2.0;
        double r29827 = r29825 / r29826;
        return r29827;
}

double f(double x, double eps) {
        double r29828 = x;
        double r29829 = 14.67295150394162;
        bool r29830 = r29828 <= r29829;
        double r29831 = 0.6666666666666667;
        double r29832 = 3.0;
        double r29833 = pow(r29828, r29832);
        double r29834 = 2.0;
        double r29835 = fma(r29831, r29833, r29834);
        double r29836 = 1.0;
        double r29837 = 2.0;
        double r29838 = pow(r29828, r29837);
        double r29839 = r29836 * r29838;
        double r29840 = r29835 - r29839;
        double r29841 = r29840 / r29834;
        double r29842 = eps;
        double r29843 = r29836 / r29842;
        double r29844 = r29836 + r29843;
        double r29845 = r29836 - r29842;
        double r29846 = r29845 * r29828;
        double r29847 = -r29846;
        double r29848 = exp(r29847);
        double r29849 = r29844 * r29848;
        double r29850 = r29843 - r29836;
        double r29851 = exp(1.0);
        double r29852 = r29836 + r29842;
        double r29853 = r29852 * r29828;
        double r29854 = -r29853;
        double r29855 = pow(r29851, r29854);
        double r29856 = r29850 * r29855;
        double r29857 = r29849 - r29856;
        double r29858 = r29857 / r29834;
        double r29859 = r29830 ? r29841 : r29858;
        return r29859;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 38.7

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

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

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

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

    if 14.67295150394162 < x

    1. Initial program 0.4

      \[\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 *-un-lft-identity0.4

      \[\leadsto \frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{\color{blue}{1 \cdot \left(-\left(1 + \varepsilon\right) \cdot x\right)}}}{2}\]
    4. Applied exp-prod0.4

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

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

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

Reproduce

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