\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 1.176449545154381270961607697245199233294:\\
\;\;\;\;\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(0.6666666666666667406815349750104360282421, {x}^{3}, \mathsf{fma}\left(-x, 1 \cdot x, 2\right)\right)\right)\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(e^{\left(-x\right) \cdot \left(\varepsilon + 1\right)}, 1, \sqrt[3]{{\left(\left(\frac{{\left(e^{x}\right)}^{\left(\varepsilon - 1\right)}}{\varepsilon} - \frac{e^{\left(-x\right) \cdot \left(\varepsilon + 1\right)}}{\varepsilon}\right) + {\left(e^{x}\right)}^{\left(\varepsilon - 1\right)}\right)}^{3}} \cdot 1\right)}{2}\\
\end{array}double f(double x, double eps) {
double r34294 = 1.0;
double r34295 = eps;
double r34296 = r34294 / r34295;
double r34297 = r34294 + r34296;
double r34298 = r34294 - r34295;
double r34299 = x;
double r34300 = r34298 * r34299;
double r34301 = -r34300;
double r34302 = exp(r34301);
double r34303 = r34297 * r34302;
double r34304 = r34296 - r34294;
double r34305 = r34294 + r34295;
double r34306 = r34305 * r34299;
double r34307 = -r34306;
double r34308 = exp(r34307);
double r34309 = r34304 * r34308;
double r34310 = r34303 - r34309;
double r34311 = 2.0;
double r34312 = r34310 / r34311;
return r34312;
}
double f(double x, double eps) {
double r34313 = x;
double r34314 = 1.1764495451543813;
bool r34315 = r34313 <= r34314;
double r34316 = 0.6666666666666667;
double r34317 = 3.0;
double r34318 = pow(r34313, r34317);
double r34319 = -r34313;
double r34320 = 1.0;
double r34321 = r34320 * r34313;
double r34322 = 2.0;
double r34323 = fma(r34319, r34321, r34322);
double r34324 = fma(r34316, r34318, r34323);
double r34325 = expm1(r34324);
double r34326 = log1p(r34325);
double r34327 = r34326 / r34322;
double r34328 = eps;
double r34329 = r34328 + r34320;
double r34330 = r34319 * r34329;
double r34331 = exp(r34330);
double r34332 = exp(r34313);
double r34333 = r34328 - r34320;
double r34334 = pow(r34332, r34333);
double r34335 = r34334 / r34328;
double r34336 = r34331 / r34328;
double r34337 = r34335 - r34336;
double r34338 = r34337 + r34334;
double r34339 = pow(r34338, r34317);
double r34340 = cbrt(r34339);
double r34341 = r34340 * r34320;
double r34342 = fma(r34331, r34320, r34341);
double r34343 = r34342 / r34322;
double r34344 = r34315 ? r34327 : r34343;
return r34344;
}



Bits error versus x



Bits error versus eps
if x < 1.1764495451543813Initial program 38.6
Taylor expanded around 0 1.2
Simplified1.2
rmApplied log1p-expm1-u1.2
Simplified1.2
if 1.1764495451543813 < x Initial program 0.5
Taylor expanded around inf 0.5
Simplified0.5
rmApplied add-cbrt-cube0.5
Simplified0.5
Final simplification1.0
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x eps)
:name "NMSE Section 6.1 mentioned, A"
(/ (- (* (+ 1.0 (/ 1.0 eps)) (exp (- (* (- 1.0 eps) x)))) (* (- (/ 1.0 eps) 1.0) (exp (- (* (+ 1.0 eps) x))))) 2.0))