\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 0.892596040930932477:\\
\;\;\;\;\left(\sqrt[3]{\mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{x}^{3}}{\varepsilon}, 1 - 0.5 \cdot {x}^{2}\right)} \cdot \left({1}^{\frac{1}{3}} - 0.166666666666666657 \cdot \left({x}^{2} \cdot {1}^{\frac{1}{3}}\right)\right)\right) \cdot \sqrt[3]{\mathsf{fma}\left(1.38778 \cdot 10^{-17}, \frac{{x}^{3}}{\varepsilon}, 1 - 0.5 \cdot {x}^{2}\right)}\\
\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 e^{\left(1 - \varepsilon\right) \cdot x}}\right)\\
\end{array}double f(double x, double eps) {
double r66506 = 1.0;
double r66507 = eps;
double r66508 = r66506 / r66507;
double r66509 = r66506 + r66508;
double r66510 = r66506 - r66507;
double r66511 = x;
double r66512 = r66510 * r66511;
double r66513 = -r66512;
double r66514 = exp(r66513);
double r66515 = r66509 * r66514;
double r66516 = r66508 - r66506;
double r66517 = r66506 + r66507;
double r66518 = r66517 * r66511;
double r66519 = -r66518;
double r66520 = exp(r66519);
double r66521 = r66516 * r66520;
double r66522 = r66515 - r66521;
double r66523 = 2.0;
double r66524 = r66522 / r66523;
return r66524;
}
double f(double x, double eps) {
double r66525 = x;
double r66526 = 0.8925960409309325;
bool r66527 = r66525 <= r66526;
double r66528 = 1.3877787807814457e-17;
double r66529 = 3.0;
double r66530 = pow(r66525, r66529);
double r66531 = eps;
double r66532 = r66530 / r66531;
double r66533 = 1.0;
double r66534 = 0.5;
double r66535 = 2.0;
double r66536 = pow(r66525, r66535);
double r66537 = r66534 * r66536;
double r66538 = r66533 - r66537;
double r66539 = fma(r66528, r66532, r66538);
double r66540 = cbrt(r66539);
double r66541 = 0.3333333333333333;
double r66542 = pow(r66533, r66541);
double r66543 = 0.16666666666666666;
double r66544 = r66536 * r66542;
double r66545 = r66543 * r66544;
double r66546 = r66542 - r66545;
double r66547 = r66540 * r66546;
double r66548 = r66547 * r66540;
double r66549 = r66533 + r66531;
double r66550 = r66549 * r66525;
double r66551 = -r66550;
double r66552 = exp(r66551);
double r66553 = 2.0;
double r66554 = r66552 / r66553;
double r66555 = r66533 / r66531;
double r66556 = r66533 - r66555;
double r66557 = r66533 + r66555;
double r66558 = r66533 - r66531;
double r66559 = r66558 * r66525;
double r66560 = exp(r66559);
double r66561 = r66553 * r66560;
double r66562 = r66557 / r66561;
double r66563 = fma(r66554, r66556, r66562);
double r66564 = r66527 ? r66548 : r66563;
return r66564;
}



Bits error versus x



Bits error versus eps
if x < 0.8925960409309325Initial program 38.6
Simplified38.6
Taylor expanded around 0 7.0
Simplified7.0
rmApplied add-cube-cbrt7.0
Taylor expanded around 0 6.7
if 0.8925960409309325 < x Initial program 0.6
Simplified0.7
Final simplification5.3
herbie shell --seed 2020064 +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))