\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;x \le -4.450925509850113 \cdot 10^{-05}:\\
\;\;\;\;\frac{e^{x}}{\frac{e^{3 \cdot x} + -1}{\left(e^{x} + 1\right) \cdot e^{x} + 1}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{1}{2} + \frac{1}{x}\right) + \left(\frac{1}{12} \cdot e^{\log \left(\left(\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\right)\right)}\right) \cdot \sqrt[3]{x}\\
\end{array}double f(double x) {
double r4351448 = x;
double r4351449 = exp(r4351448);
double r4351450 = 1.0;
double r4351451 = r4351449 - r4351450;
double r4351452 = r4351449 / r4351451;
return r4351452;
}
double f(double x) {
double r4351453 = x;
double r4351454 = -4.450925509850113e-05;
bool r4351455 = r4351453 <= r4351454;
double r4351456 = exp(r4351453);
double r4351457 = 3.0;
double r4351458 = r4351457 * r4351453;
double r4351459 = exp(r4351458);
double r4351460 = -1.0;
double r4351461 = r4351459 + r4351460;
double r4351462 = 1.0;
double r4351463 = r4351456 + r4351462;
double r4351464 = r4351463 * r4351456;
double r4351465 = r4351464 + r4351462;
double r4351466 = r4351461 / r4351465;
double r4351467 = r4351456 / r4351466;
double r4351468 = 0.5;
double r4351469 = r4351462 / r4351453;
double r4351470 = r4351468 + r4351469;
double r4351471 = 0.08333333333333333;
double r4351472 = cbrt(r4351453);
double r4351473 = r4351472 * r4351472;
double r4351474 = /* ERROR: no posit support in C */;
double r4351475 = /* ERROR: no posit support in C */;
double r4351476 = log(r4351475);
double r4351477 = exp(r4351476);
double r4351478 = r4351471 * r4351477;
double r4351479 = r4351478 * r4351472;
double r4351480 = r4351470 + r4351479;
double r4351481 = r4351455 ? r4351467 : r4351480;
return r4351481;
}




Bits error versus x
| Original | 39.7 |
|---|---|
| Target | 39.3 |
| Herbie | 0.8 |
if x < -4.450925509850113e-05Initial program 0.1
rmApplied flip3--0.1
Simplified0.1
Simplified0.1
if -4.450925509850113e-05 < x Initial program 60.1
Taylor expanded around 0 1.1
rmApplied add-cube-cbrt1.1
Applied associate-*r*1.1
rmApplied insert-posit161.1
rmApplied add-exp-log1.1
Final simplification0.8
herbie shell --seed 2019163
(FPCore (x)
:name "expq2 (section 3.11)"
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))