Average Error: 29.0 → 1.0
Time: 22.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 1.176449545154381270961607697245199233294:\\ \;\;\;\;\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, \mathsf{fma}\left(-x, 1 \cdot x, 2\right)\right)\right)\right)}{2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(e^{\left(-x\right) \cdot \left(\varepsilon + 1\right)}, 1, \sqrt[3]{{\left(\left(\frac{{\left(e^{x}\right)}^{\left(\varepsilon - 1\right)}}{\varepsilon} - \frac{e^{\left(-x\right) \cdot \left(\varepsilon + 1\right)}}{\varepsilon}\right) + {\left(e^{x}\right)}^{\left(\varepsilon - 1\right)}\right)}^{3}} \cdot 1\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 1.176449545154381270961607697245199233294:\\
\;\;\;\;\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, \mathsf{fma}\left(-x, 1 \cdot x, 2\right)\right)\right)\right)}{2}\\

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

\end{array}
double f(double x, double eps) {
        double r34294 = 1.0;
        double r34295 = eps;
        double r34296 = r34294 / r34295;
        double r34297 = r34294 + r34296;
        double r34298 = r34294 - r34295;
        double r34299 = x;
        double r34300 = r34298 * r34299;
        double r34301 = -r34300;
        double r34302 = exp(r34301);
        double r34303 = r34297 * r34302;
        double r34304 = r34296 - r34294;
        double r34305 = r34294 + r34295;
        double r34306 = r34305 * r34299;
        double r34307 = -r34306;
        double r34308 = exp(r34307);
        double r34309 = r34304 * r34308;
        double r34310 = r34303 - r34309;
        double r34311 = 2.0;
        double r34312 = r34310 / r34311;
        return r34312;
}

double f(double x, double eps) {
        double r34313 = x;
        double r34314 = 1.1764495451543813;
        bool r34315 = r34313 <= r34314;
        double r34316 = 0.6666666666666667;
        double r34317 = 3.0;
        double r34318 = pow(r34313, r34317);
        double r34319 = -r34313;
        double r34320 = 1.0;
        double r34321 = r34320 * r34313;
        double r34322 = 2.0;
        double r34323 = fma(r34319, r34321, r34322);
        double r34324 = fma(r34316, r34318, r34323);
        double r34325 = expm1(r34324);
        double r34326 = log1p(r34325);
        double r34327 = r34326 / r34322;
        double r34328 = eps;
        double r34329 = r34328 + r34320;
        double r34330 = r34319 * r34329;
        double r34331 = exp(r34330);
        double r34332 = exp(r34313);
        double r34333 = r34328 - r34320;
        double r34334 = pow(r34332, r34333);
        double r34335 = r34334 / r34328;
        double r34336 = r34331 / r34328;
        double r34337 = r34335 - r34336;
        double r34338 = r34337 + r34334;
        double r34339 = pow(r34338, r34317);
        double r34340 = cbrt(r34339);
        double r34341 = r34340 * r34320;
        double r34342 = fma(r34331, r34320, r34341);
        double r34343 = r34342 / r34322;
        double r34344 = r34315 ? r34327 : r34343;
        return r34344;
}

Error

Bits error versus x

Bits error versus eps

Derivation

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

    1. Initial program 38.6

      \[\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.6666666666666667406815349750104360282421 \cdot {x}^{3} + 2\right) - 1 \cdot {x}^{2}}}{2}\]
    3. Simplified1.2

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

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

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

    if 1.1764495451543813 < x

    1. Initial program 0.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 inf 0.5

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

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(e^{-x \cdot \left(\varepsilon + 1\right)}, 1, 1 \cdot \left(\left(e^{x \cdot \left(\varepsilon - 1\right)} + \frac{e^{x \cdot \left(\varepsilon - 1\right)}}{\varepsilon}\right) - \frac{e^{-x \cdot \left(\varepsilon + 1\right)}}{\varepsilon}\right)\right)}}{2}\]
    4. Using strategy rm
    5. Applied add-cbrt-cube0.5

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

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

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

Reproduce

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