\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.4798868095701662 \cdot 10^{-06}:\\
\;\;\;\;\frac{1}{2} \cdot \sqrt[3]{\left(\left(\left(\mathsf{fma}\left(\frac{2}{3}, \left(x \cdot x\right) \cdot x, 2\right)\right)\right) - x \cdot x\right) \cdot \left(\sqrt[3]{\left(\left(\left(\mathsf{fma}\left(\frac{2}{3}, \left(x \cdot x\right) \cdot x, 2\right)\right)\right) - x \cdot x\right) \cdot \left(\left(\left(\left(\mathsf{fma}\left(\frac{2}{3}, \left(x \cdot x\right) \cdot x, 2\right)\right)\right) - x \cdot x\right) \cdot \left(\left(\left(\mathsf{fma}\left(\frac{2}{3}, \left(x \cdot x\right) \cdot x, 2\right)\right)\right) - x \cdot x\right)\right)} \cdot \left(\left(\left(\mathsf{fma}\left(\frac{2}{3}, \left(x \cdot x\right) \cdot x, 2\right)\right)\right) - x \cdot x\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot \left(\mathsf{fma}\left(e^{\left(\varepsilon + -1\right) \cdot x}, \frac{1}{\varepsilon}, \mathsf{expm1}\left(\mathsf{log1p}\left(e^{\left(\varepsilon + -1\right) \cdot x}\right)\right)\right) - \frac{\frac{1}{\varepsilon} - 1}{e^{\mathsf{fma}\left(\varepsilon, x, x\right)}}\right)\\
\end{array}double f(double x, double eps) {
double r1562351 = 1.0;
double r1562352 = eps;
double r1562353 = r1562351 / r1562352;
double r1562354 = r1562351 + r1562353;
double r1562355 = r1562351 - r1562352;
double r1562356 = x;
double r1562357 = r1562355 * r1562356;
double r1562358 = -r1562357;
double r1562359 = exp(r1562358);
double r1562360 = r1562354 * r1562359;
double r1562361 = r1562353 - r1562351;
double r1562362 = r1562351 + r1562352;
double r1562363 = r1562362 * r1562356;
double r1562364 = -r1562363;
double r1562365 = exp(r1562364);
double r1562366 = r1562361 * r1562365;
double r1562367 = r1562360 - r1562366;
double r1562368 = 2.0;
double r1562369 = r1562367 / r1562368;
return r1562369;
}
double f(double x, double eps) {
double r1562370 = x;
double r1562371 = 1.4798868095701662e-06;
bool r1562372 = r1562370 <= r1562371;
double r1562373 = 0.5;
double r1562374 = 0.6666666666666666;
double r1562375 = r1562370 * r1562370;
double r1562376 = r1562375 * r1562370;
double r1562377 = 2.0;
double r1562378 = fma(r1562374, r1562376, r1562377);
double r1562379 = /* ERROR: no posit support in C */;
double r1562380 = /* ERROR: no posit support in C */;
double r1562381 = r1562380 - r1562375;
double r1562382 = r1562381 * r1562381;
double r1562383 = r1562381 * r1562382;
double r1562384 = cbrt(r1562383);
double r1562385 = r1562384 * r1562381;
double r1562386 = r1562381 * r1562385;
double r1562387 = cbrt(r1562386);
double r1562388 = r1562373 * r1562387;
double r1562389 = eps;
double r1562390 = -1.0;
double r1562391 = r1562389 + r1562390;
double r1562392 = r1562391 * r1562370;
double r1562393 = exp(r1562392);
double r1562394 = 1.0;
double r1562395 = r1562394 / r1562389;
double r1562396 = log1p(r1562393);
double r1562397 = expm1(r1562396);
double r1562398 = fma(r1562393, r1562395, r1562397);
double r1562399 = r1562395 - r1562394;
double r1562400 = fma(r1562389, r1562370, r1562370);
double r1562401 = exp(r1562400);
double r1562402 = r1562399 / r1562401;
double r1562403 = r1562398 - r1562402;
double r1562404 = r1562373 * r1562403;
double r1562405 = r1562372 ? r1562388 : r1562404;
return r1562405;
}



Bits error versus x



Bits error versus eps
if x < 1.4798868095701662e-06Initial program 38.1
Simplified38.1
Taylor expanded around 0 1.4
Simplified1.4
rmApplied insert-posit161.4
rmApplied add-cbrt-cube1.4
rmApplied add-cbrt-cube1.4
if 1.4798868095701662e-06 < x Initial program 1.7
Simplified1.7
rmApplied expm1-log1p-u1.7
Final simplification1.5
herbie shell --seed 2019168 +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))