\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 90.24341034286276:\\
\;\;\;\;\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{\mathsf{fma}\left(\left(\sqrt{e^{\left(-1 - \varepsilon\right) \cdot x}}\right), \left(\sqrt{e^{\left(-1 - \varepsilon\right) \cdot x}}\right), \left(e^{\left(-1 - \varepsilon\right) \cdot x} \cdot \frac{-1}{\varepsilon}\right)\right) + \left(\left(e^{\varepsilon \cdot x - x} + \frac{e^{\varepsilon \cdot x - x}}{\varepsilon}\right) + \mathsf{fma}\left(\left(\frac{-1}{\varepsilon}\right), \left(e^{\left(-1 - \varepsilon\right) \cdot x}\right), \left(e^{\left(-1 - \varepsilon\right) \cdot x} \cdot \frac{1}{\varepsilon}\right)\right)\right)}{2}\\
\end{array}double f(double x, double eps) {
double r1544473 = 1.0;
double r1544474 = eps;
double r1544475 = r1544473 / r1544474;
double r1544476 = r1544473 + r1544475;
double r1544477 = r1544473 - r1544474;
double r1544478 = x;
double r1544479 = r1544477 * r1544478;
double r1544480 = -r1544479;
double r1544481 = exp(r1544480);
double r1544482 = r1544476 * r1544481;
double r1544483 = r1544475 - r1544473;
double r1544484 = r1544473 + r1544474;
double r1544485 = r1544484 * r1544478;
double r1544486 = -r1544485;
double r1544487 = exp(r1544486);
double r1544488 = r1544483 * r1544487;
double r1544489 = r1544482 - r1544488;
double r1544490 = 2.0;
double r1544491 = r1544489 / r1544490;
return r1544491;
}
double f(double x, double eps) {
double r1544492 = x;
double r1544493 = 90.24341034286276;
bool r1544494 = r1544492 <= r1544493;
double r1544495 = r1544492 * r1544492;
double r1544496 = r1544495 * r1544492;
double r1544497 = 0.6666666666666666;
double r1544498 = 2.0;
double r1544499 = r1544498 - r1544495;
double r1544500 = fma(r1544496, r1544497, r1544499);
double r1544501 = r1544500 / r1544498;
double r1544502 = -1.0;
double r1544503 = eps;
double r1544504 = r1544502 - r1544503;
double r1544505 = r1544504 * r1544492;
double r1544506 = exp(r1544505);
double r1544507 = sqrt(r1544506);
double r1544508 = r1544502 / r1544503;
double r1544509 = r1544506 * r1544508;
double r1544510 = fma(r1544507, r1544507, r1544509);
double r1544511 = r1544503 * r1544492;
double r1544512 = r1544511 - r1544492;
double r1544513 = exp(r1544512);
double r1544514 = r1544513 / r1544503;
double r1544515 = r1544513 + r1544514;
double r1544516 = 1.0;
double r1544517 = r1544516 / r1544503;
double r1544518 = r1544506 * r1544517;
double r1544519 = fma(r1544508, r1544506, r1544518);
double r1544520 = r1544515 + r1544519;
double r1544521 = r1544510 + r1544520;
double r1544522 = r1544521 / r1544498;
double r1544523 = r1544494 ? r1544501 : r1544522;
return r1544523;
}



Bits error versus x



Bits error versus eps
if x < 90.24341034286276Initial program 39.5
Simplified39.5
Taylor expanded around 0 1.1
Simplified1.1
rmApplied fma-udef1.1
Applied associate--l+1.1
Taylor expanded around 0 1.1
Simplified1.1
if 90.24341034286276 < x Initial program 0.2
Simplified0.2
rmApplied div-inv0.2
Applied add-sqr-sqrt0.2
Applied prod-diff0.2
Applied associate-+l+0.2
Final simplification0.9
herbie shell --seed 2019130 +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))