\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 439.217255613824989:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{2}, 0.66666666666666674 \cdot x - 1, 2\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \sqrt[3]{{\left(\left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}\right)}^{3}}}{2}\\
\end{array}double f(double x, double eps) {
double r40496 = 1.0;
double r40497 = eps;
double r40498 = r40496 / r40497;
double r40499 = r40496 + r40498;
double r40500 = r40496 - r40497;
double r40501 = x;
double r40502 = r40500 * r40501;
double r40503 = -r40502;
double r40504 = exp(r40503);
double r40505 = r40499 * r40504;
double r40506 = r40498 - r40496;
double r40507 = r40496 + r40497;
double r40508 = r40507 * r40501;
double r40509 = -r40508;
double r40510 = exp(r40509);
double r40511 = r40506 * r40510;
double r40512 = r40505 - r40511;
double r40513 = 2.0;
double r40514 = r40512 / r40513;
return r40514;
}
double f(double x, double eps) {
double r40515 = x;
double r40516 = 439.217255613825;
bool r40517 = r40515 <= r40516;
double r40518 = 2.0;
double r40519 = pow(r40515, r40518);
double r40520 = 0.6666666666666667;
double r40521 = r40520 * r40515;
double r40522 = 1.0;
double r40523 = r40521 - r40522;
double r40524 = 2.0;
double r40525 = fma(r40519, r40523, r40524);
double r40526 = r40525 / r40524;
double r40527 = eps;
double r40528 = r40522 / r40527;
double r40529 = r40522 + r40528;
double r40530 = r40522 - r40527;
double r40531 = r40530 * r40515;
double r40532 = -r40531;
double r40533 = exp(r40532);
double r40534 = r40529 * r40533;
double r40535 = r40528 - r40522;
double r40536 = r40522 + r40527;
double r40537 = r40536 * r40515;
double r40538 = -r40537;
double r40539 = exp(r40538);
double r40540 = r40535 * r40539;
double r40541 = 3.0;
double r40542 = pow(r40540, r40541);
double r40543 = cbrt(r40542);
double r40544 = r40534 - r40543;
double r40545 = r40544 / r40524;
double r40546 = r40517 ? r40526 : r40545;
return r40546;
}



Bits error versus x



Bits error versus eps
if x < 439.217255613825Initial program 38.8
Taylor expanded around 0 1.4
Simplified1.4
Taylor expanded around 0 1.4
Simplified1.4
if 439.217255613825 < x Initial program 0.1
rmApplied add-cbrt-cube0.1
Applied add-cbrt-cube42.7
Applied cbrt-unprod42.7
Simplified0.1
Final simplification1.1
herbie shell --seed 2020027 +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))