\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.3945538910343576:\\
\;\;\;\;1 - 0.5 \cdot {x}^{2}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{e^{-\left(1 + \varepsilon\right) \cdot x}}{2}, 1 - \frac{1}{\varepsilon}, \frac{1 + \frac{1}{\varepsilon}}{2 \cdot \left(\left(\sqrt[3]{e^{\left(1 - \varepsilon\right) \cdot x}} \cdot \sqrt[3]{e^{\left(1 - \varepsilon\right) \cdot x}}\right) \cdot \sqrt[3]{e^{\left(1 - \varepsilon\right) \cdot x}}\right)}\right)\\
\end{array}double f(double x, double eps) {
double r42487 = 1.0;
double r42488 = eps;
double r42489 = r42487 / r42488;
double r42490 = r42487 + r42489;
double r42491 = r42487 - r42488;
double r42492 = x;
double r42493 = r42491 * r42492;
double r42494 = -r42493;
double r42495 = exp(r42494);
double r42496 = r42490 * r42495;
double r42497 = r42489 - r42487;
double r42498 = r42487 + r42488;
double r42499 = r42498 * r42492;
double r42500 = -r42499;
double r42501 = exp(r42500);
double r42502 = r42497 * r42501;
double r42503 = r42496 - r42502;
double r42504 = 2.0;
double r42505 = r42503 / r42504;
return r42505;
}
double f(double x, double eps) {
double r42506 = x;
double r42507 = 1.3945538910343576;
bool r42508 = r42506 <= r42507;
double r42509 = 1.0;
double r42510 = 0.5;
double r42511 = 2.0;
double r42512 = pow(r42506, r42511);
double r42513 = r42510 * r42512;
double r42514 = r42509 - r42513;
double r42515 = eps;
double r42516 = r42509 + r42515;
double r42517 = r42516 * r42506;
double r42518 = -r42517;
double r42519 = exp(r42518);
double r42520 = 2.0;
double r42521 = r42519 / r42520;
double r42522 = r42509 / r42515;
double r42523 = r42509 - r42522;
double r42524 = r42509 + r42522;
double r42525 = r42509 - r42515;
double r42526 = r42525 * r42506;
double r42527 = exp(r42526);
double r42528 = cbrt(r42527);
double r42529 = r42528 * r42528;
double r42530 = r42529 * r42528;
double r42531 = r42520 * r42530;
double r42532 = r42524 / r42531;
double r42533 = fma(r42521, r42523, r42532);
double r42534 = r42508 ? r42514 : r42533;
return r42534;
}



Bits error versus x



Bits error versus eps
if x < 1.3945538910343576Initial program 39.4
Simplified39.4
Taylor expanded around 0 7.8
Simplified7.8
rmApplied expm1-log1p-u7.8
Taylor expanded around 0 1.3
if 1.3945538910343576 < x Initial program 0.4
Simplified0.4
rmApplied add-cube-cbrt0.4
Final simplification1.1
herbie shell --seed 2020025 +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))