\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 84.47417936124703885525377700105309486389:\\
\;\;\;\;\frac{e^{\log \left(2 + x \cdot \left(\left(x \cdot 0.6666666666666667406815349750104360282421 - 1\right) \cdot x\right)\right)}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(e^{x \cdot \left(\varepsilon - 1\right)} + \frac{e^{x \cdot \left(\varepsilon - 1\right)}}{\varepsilon}\right) \cdot 1 - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\\
\end{array}double f(double x, double eps) {
double r34557 = 1.0;
double r34558 = eps;
double r34559 = r34557 / r34558;
double r34560 = r34557 + r34559;
double r34561 = r34557 - r34558;
double r34562 = x;
double r34563 = r34561 * r34562;
double r34564 = -r34563;
double r34565 = exp(r34564);
double r34566 = r34560 * r34565;
double r34567 = r34559 - r34557;
double r34568 = r34557 + r34558;
double r34569 = r34568 * r34562;
double r34570 = -r34569;
double r34571 = exp(r34570);
double r34572 = r34567 * r34571;
double r34573 = r34566 - r34572;
double r34574 = 2.0;
double r34575 = r34573 / r34574;
return r34575;
}
double f(double x, double eps) {
double r34576 = x;
double r34577 = 84.47417936124704;
bool r34578 = r34576 <= r34577;
double r34579 = 2.0;
double r34580 = 0.6666666666666667;
double r34581 = r34576 * r34580;
double r34582 = 1.0;
double r34583 = r34581 - r34582;
double r34584 = r34583 * r34576;
double r34585 = r34576 * r34584;
double r34586 = r34579 + r34585;
double r34587 = log(r34586);
double r34588 = exp(r34587);
double r34589 = r34588 / r34579;
double r34590 = eps;
double r34591 = r34590 - r34582;
double r34592 = r34576 * r34591;
double r34593 = exp(r34592);
double r34594 = r34593 / r34590;
double r34595 = r34593 + r34594;
double r34596 = r34595 * r34582;
double r34597 = r34582 / r34590;
double r34598 = r34597 - r34582;
double r34599 = r34582 + r34590;
double r34600 = r34599 * r34576;
double r34601 = -r34600;
double r34602 = exp(r34601);
double r34603 = r34598 * r34602;
double r34604 = r34596 - r34603;
double r34605 = r34604 / r34579;
double r34606 = r34578 ? r34589 : r34605;
return r34606;
}



Bits error versus x



Bits error versus eps
Results
if x < 84.47417936124704Initial program 39.6
Taylor expanded around 0 1.3
rmApplied add-exp-log1.4
Simplified1.4
rmApplied associate-*l*1.4
Simplified1.4
if 84.47417936124704 < x Initial program 0.3
Taylor expanded around inf 0.3
Simplified0.3
Final simplification1.1
herbie shell --seed 2019303
(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))