\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 45.88594712019421706372668268159031867981:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{2}, 0.6666666666666667406815349750104360282421 \cdot x - 1, 2\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(1 + \frac{1}{\varepsilon}, e^{-\left(1 - \varepsilon\right) \cdot x}, -\frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)}{2}\\
\end{array}double f(double x, double eps) {
double r67603 = 1.0;
double r67604 = eps;
double r67605 = r67603 / r67604;
double r67606 = r67603 + r67605;
double r67607 = r67603 - r67604;
double r67608 = x;
double r67609 = r67607 * r67608;
double r67610 = -r67609;
double r67611 = exp(r67610);
double r67612 = r67606 * r67611;
double r67613 = r67605 - r67603;
double r67614 = r67603 + r67604;
double r67615 = r67614 * r67608;
double r67616 = -r67615;
double r67617 = exp(r67616);
double r67618 = r67613 * r67617;
double r67619 = r67612 - r67618;
double r67620 = 2.0;
double r67621 = r67619 / r67620;
return r67621;
}
double f(double x, double eps) {
double r67622 = x;
double r67623 = 45.88594712019422;
bool r67624 = r67622 <= r67623;
double r67625 = 2.0;
double r67626 = pow(r67622, r67625);
double r67627 = 0.6666666666666667;
double r67628 = r67627 * r67622;
double r67629 = 1.0;
double r67630 = r67628 - r67629;
double r67631 = 2.0;
double r67632 = fma(r67626, r67630, r67631);
double r67633 = r67632 / r67631;
double r67634 = eps;
double r67635 = r67629 / r67634;
double r67636 = r67629 + r67635;
double r67637 = r67629 - r67634;
double r67638 = r67637 * r67622;
double r67639 = -r67638;
double r67640 = exp(r67639);
double r67641 = r67635 - r67629;
double r67642 = r67629 + r67634;
double r67643 = r67642 * r67622;
double r67644 = exp(r67643);
double r67645 = r67641 / r67644;
double r67646 = -r67645;
double r67647 = fma(r67636, r67640, r67646);
double r67648 = r67647 / r67631;
double r67649 = r67624 ? r67633 : r67648;
return r67649;
}



Bits error versus x



Bits error versus eps
if x < 45.88594712019422Initial program 39.8
Taylor expanded around 0 1.0
Simplified1.0
rmApplied add-cube-cbrt2.6
Applied prod-diff2.6
Simplified1.0
Simplified1.0
if 45.88594712019422 < x Initial program 0.3
rmApplied fma-neg0.3
Simplified0.3
Final simplification0.8
herbie shell --seed 2019326 +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))