\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 299.418440145869169555226108059287071228:\\
\;\;\;\;\frac{\sqrt[3]{{\left(\sqrt{\mathsf{fma}\left({x}^{3}, 0.6666666666666667406815349750104360282421, 2\right)} \cdot \sqrt{\mathsf{fma}\left({x}^{3}, 0.6666666666666667406815349750104360282421, 2\right)}\right)}^{3}} - 1 \cdot {x}^{2}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{\frac{1}{\varepsilon} + 1}{e^{\left(1 - \varepsilon\right) \cdot x}} - \frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}\right)\right)}{2}\\
\end{array}double f(double x, double eps) {
double r40315 = 1.0;
double r40316 = eps;
double r40317 = r40315 / r40316;
double r40318 = r40315 + r40317;
double r40319 = r40315 - r40316;
double r40320 = x;
double r40321 = r40319 * r40320;
double r40322 = -r40321;
double r40323 = exp(r40322);
double r40324 = r40318 * r40323;
double r40325 = r40317 - r40315;
double r40326 = r40315 + r40316;
double r40327 = r40326 * r40320;
double r40328 = -r40327;
double r40329 = exp(r40328);
double r40330 = r40325 * r40329;
double r40331 = r40324 - r40330;
double r40332 = 2.0;
double r40333 = r40331 / r40332;
return r40333;
}
double f(double x, double eps) {
double r40334 = x;
double r40335 = 299.41844014586917;
bool r40336 = r40334 <= r40335;
double r40337 = 3.0;
double r40338 = pow(r40334, r40337);
double r40339 = 0.6666666666666667;
double r40340 = 2.0;
double r40341 = fma(r40338, r40339, r40340);
double r40342 = sqrt(r40341);
double r40343 = r40342 * r40342;
double r40344 = pow(r40343, r40337);
double r40345 = cbrt(r40344);
double r40346 = 1.0;
double r40347 = 2.0;
double r40348 = pow(r40334, r40347);
double r40349 = r40346 * r40348;
double r40350 = r40345 - r40349;
double r40351 = r40350 / r40340;
double r40352 = eps;
double r40353 = r40346 / r40352;
double r40354 = r40353 + r40346;
double r40355 = r40346 - r40352;
double r40356 = r40355 * r40334;
double r40357 = exp(r40356);
double r40358 = r40354 / r40357;
double r40359 = r40353 - r40346;
double r40360 = r40346 + r40352;
double r40361 = r40360 * r40334;
double r40362 = exp(r40361);
double r40363 = r40359 / r40362;
double r40364 = r40358 - r40363;
double r40365 = log1p(r40364);
double r40366 = expm1(r40365);
double r40367 = r40366 / r40340;
double r40368 = r40336 ? r40351 : r40367;
return r40368;
}



Bits error versus x



Bits error versus eps
if x < 299.41844014586917Initial program 39.4
Taylor expanded around 0 1.3
Simplified1.3
rmApplied add-cbrt-cube1.3
Simplified1.3
rmApplied add-sqr-sqrt1.3
Simplified1.3
Simplified1.3
if 299.41844014586917 < x Initial program 0.2
rmApplied expm1-log1p-u0.2
Simplified0.2
Final simplification1.0
herbie shell --seed 2019306 +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))