Average Error: 29.1 → 0.9
Time: 6.5s
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 347.893050734993551:\\ \;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(1, \frac{e^{x \cdot \varepsilon - 1 \cdot x}}{\varepsilon}, 1 \cdot e^{x \cdot \varepsilon - 1 \cdot x}\right) - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{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 347.893050734993551:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{3}, 0.66666666666666674, 2 - 1 \cdot {x}^{2}\right)}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r45804 = 1.0;
        double r45805 = eps;
        double r45806 = r45804 / r45805;
        double r45807 = r45804 + r45806;
        double r45808 = r45804 - r45805;
        double r45809 = x;
        double r45810 = r45808 * r45809;
        double r45811 = -r45810;
        double r45812 = exp(r45811);
        double r45813 = r45807 * r45812;
        double r45814 = r45806 - r45804;
        double r45815 = r45804 + r45805;
        double r45816 = r45815 * r45809;
        double r45817 = -r45816;
        double r45818 = exp(r45817);
        double r45819 = r45814 * r45818;
        double r45820 = r45813 - r45819;
        double r45821 = 2.0;
        double r45822 = r45820 / r45821;
        return r45822;
}

double f(double x, double eps) {
        double r45823 = x;
        double r45824 = 347.89305073499355;
        bool r45825 = r45823 <= r45824;
        double r45826 = 3.0;
        double r45827 = pow(r45823, r45826);
        double r45828 = 0.6666666666666667;
        double r45829 = 2.0;
        double r45830 = 1.0;
        double r45831 = 2.0;
        double r45832 = pow(r45823, r45831);
        double r45833 = r45830 * r45832;
        double r45834 = r45829 - r45833;
        double r45835 = fma(r45827, r45828, r45834);
        double r45836 = r45835 / r45829;
        double r45837 = eps;
        double r45838 = r45823 * r45837;
        double r45839 = r45830 * r45823;
        double r45840 = r45838 - r45839;
        double r45841 = exp(r45840);
        double r45842 = r45841 / r45837;
        double r45843 = r45830 * r45841;
        double r45844 = fma(r45830, r45842, r45843);
        double r45845 = r45830 / r45837;
        double r45846 = r45845 - r45830;
        double r45847 = r45830 + r45837;
        double r45848 = r45847 * r45823;
        double r45849 = -r45848;
        double r45850 = exp(r45849);
        double r45851 = r45846 * r45850;
        double r45852 = r45844 - r45851;
        double r45853 = r45852 / r45829;
        double r45854 = r45825 ? r45836 : r45853;
        return r45854;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

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

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

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

    if 347.89305073499355 < x

    1. Initial program 0.0

      \[\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 inf 0.0

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

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

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

Reproduce

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