\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 223.51192032584117:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(\left(x \cdot x\right) \cdot x\right), \frac{2}{3}, \left(2 - x \cdot x\right)\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{1}{\varepsilon} + 1\right) \cdot e^{\varepsilon \cdot x - x} - e^{\left(\varepsilon + 1\right) \cdot \left(-x\right)} \cdot \left(\frac{1}{\varepsilon} - 1\right)}{2}\\
\end{array}double f(double x, double eps) {
double r16730626 = 1.0;
double r16730627 = eps;
double r16730628 = r16730626 / r16730627;
double r16730629 = r16730626 + r16730628;
double r16730630 = r16730626 - r16730627;
double r16730631 = x;
double r16730632 = r16730630 * r16730631;
double r16730633 = -r16730632;
double r16730634 = exp(r16730633);
double r16730635 = r16730629 * r16730634;
double r16730636 = r16730628 - r16730626;
double r16730637 = r16730626 + r16730627;
double r16730638 = r16730637 * r16730631;
double r16730639 = -r16730638;
double r16730640 = exp(r16730639);
double r16730641 = r16730636 * r16730640;
double r16730642 = r16730635 - r16730641;
double r16730643 = 2.0;
double r16730644 = r16730642 / r16730643;
return r16730644;
}
double f(double x, double eps) {
double r16730645 = x;
double r16730646 = 223.51192032584117;
bool r16730647 = r16730645 <= r16730646;
double r16730648 = r16730645 * r16730645;
double r16730649 = r16730648 * r16730645;
double r16730650 = 0.6666666666666666;
double r16730651 = 2.0;
double r16730652 = r16730651 - r16730648;
double r16730653 = fma(r16730649, r16730650, r16730652);
double r16730654 = r16730653 / r16730651;
double r16730655 = 1.0;
double r16730656 = eps;
double r16730657 = r16730655 / r16730656;
double r16730658 = r16730657 + r16730655;
double r16730659 = r16730656 * r16730645;
double r16730660 = r16730659 - r16730645;
double r16730661 = exp(r16730660);
double r16730662 = r16730658 * r16730661;
double r16730663 = r16730656 + r16730655;
double r16730664 = -r16730645;
double r16730665 = r16730663 * r16730664;
double r16730666 = exp(r16730665);
double r16730667 = r16730657 - r16730655;
double r16730668 = r16730666 * r16730667;
double r16730669 = r16730662 - r16730668;
double r16730670 = r16730669 / r16730651;
double r16730671 = r16730647 ? r16730654 : r16730670;
return r16730671;
}



Bits error versus x



Bits error versus eps
if x < 223.51192032584117Initial program 39.5
Taylor expanded around 0 1.3
Simplified1.3
if 223.51192032584117 < x Initial program 0.1
Taylor expanded around -inf 0.1
Final simplification1.0
herbie shell --seed 2019125 +o rules:numerics
(FPCore (x eps)
:name "NMSE Section 6.1 mentioned, A"
(/ (- (* (+ 1 (/ 1 eps)) (exp (- (* (- 1 eps) x)))) (* (- (/ 1 eps) 1) (exp (- (* (+ 1 eps) x))))) 2))