Average Error: 29.5 → 1.0
Time: 7.6s
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 117.76041323671743:\\ \;\;\;\;\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 \left(\frac{1}{e^{\mathsf{fma}\left(x, \varepsilon, 1 \cdot x\right)}} + e^{x \cdot \varepsilon - 1 \cdot x}\right) - 1 \cdot \frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon}\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 117.76041323671743:\\
\;\;\;\;\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 \left(\frac{1}{e^{\mathsf{fma}\left(x, \varepsilon, 1 \cdot x\right)}} + e^{x \cdot \varepsilon - 1 \cdot x}\right) - 1 \cdot \frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon}\right)}{2}\\

\end{array}
double f(double x, double eps) {
        double r34072 = 1.0;
        double r34073 = eps;
        double r34074 = r34072 / r34073;
        double r34075 = r34072 + r34074;
        double r34076 = r34072 - r34073;
        double r34077 = x;
        double r34078 = r34076 * r34077;
        double r34079 = -r34078;
        double r34080 = exp(r34079);
        double r34081 = r34075 * r34080;
        double r34082 = r34074 - r34072;
        double r34083 = r34072 + r34073;
        double r34084 = r34083 * r34077;
        double r34085 = -r34084;
        double r34086 = exp(r34085);
        double r34087 = r34082 * r34086;
        double r34088 = r34081 - r34087;
        double r34089 = 2.0;
        double r34090 = r34088 / r34089;
        return r34090;
}

double f(double x, double eps) {
        double r34091 = x;
        double r34092 = 117.76041323671743;
        bool r34093 = r34091 <= r34092;
        double r34094 = 3.0;
        double r34095 = pow(r34091, r34094);
        double r34096 = 0.6666666666666667;
        double r34097 = 2.0;
        double r34098 = 1.0;
        double r34099 = 2.0;
        double r34100 = pow(r34091, r34099);
        double r34101 = r34098 * r34100;
        double r34102 = r34097 - r34101;
        double r34103 = fma(r34095, r34096, r34102);
        double r34104 = r34103 / r34097;
        double r34105 = eps;
        double r34106 = r34091 * r34105;
        double r34107 = r34098 * r34091;
        double r34108 = r34106 - r34107;
        double r34109 = exp(r34108);
        double r34110 = r34109 / r34105;
        double r34111 = 1.0;
        double r34112 = fma(r34091, r34105, r34107);
        double r34113 = exp(r34112);
        double r34114 = r34111 / r34113;
        double r34115 = r34114 + r34109;
        double r34116 = r34098 * r34115;
        double r34117 = r34106 + r34107;
        double r34118 = -r34117;
        double r34119 = exp(r34118);
        double r34120 = r34119 / r34105;
        double r34121 = r34098 * r34120;
        double r34122 = r34116 - r34121;
        double r34123 = fma(r34098, r34110, r34122);
        double r34124 = r34123 / r34097;
        double r34125 = r34093 ? r34104 : r34124;
        return r34125;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

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

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

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

    if 117.76041323671743 < x

    1. Initial program 0.1

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 117.76041323671743:\\ \;\;\;\;\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 \left(\frac{1}{e^{\mathsf{fma}\left(x, \varepsilon, 1 \cdot x\right)}} + e^{x \cdot \varepsilon - 1 \cdot x}\right) - 1 \cdot \frac{e^{-\left(x \cdot \varepsilon + 1 \cdot x\right)}}{\varepsilon}\right)}{2}\\ \end{array}\]

Reproduce

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