\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.9576068429522089919814220593252684921026:\\
\;\;\;\;\sqrt[3]{\frac{1}{{\left(1 - \frac{1}{e^{x}}\right)}^{3}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} + \left(\frac{1}{12} \cdot x + \frac{1}{x}\right)\\
\end{array}double f(double x) {
double r111652 = x;
double r111653 = exp(r111652);
double r111654 = 1.0;
double r111655 = r111653 - r111654;
double r111656 = r111653 / r111655;
return r111656;
}
double f(double x) {
double r111657 = x;
double r111658 = exp(r111657);
double r111659 = 0.957606842952209;
bool r111660 = r111658 <= r111659;
double r111661 = 1.0;
double r111662 = 1.0;
double r111663 = r111662 / r111658;
double r111664 = r111661 - r111663;
double r111665 = 3.0;
double r111666 = pow(r111664, r111665);
double r111667 = r111661 / r111666;
double r111668 = cbrt(r111667);
double r111669 = 0.5;
double r111670 = 0.08333333333333333;
double r111671 = r111670 * r111657;
double r111672 = r111661 / r111657;
double r111673 = r111671 + r111672;
double r111674 = r111669 + r111673;
double r111675 = r111660 ? r111668 : r111674;
return r111675;
}




Bits error versus x
Results
| Original | 41.3 |
|---|---|
| Target | 40.8 |
| Herbie | 0.7 |
if (exp x) < 0.957606842952209Initial program 0.0
rmApplied clear-num0.0
Simplified0.0
rmApplied add-cbrt-cube0.1
Simplified0.1
rmApplied add-cbrt-cube0.1
Applied cbrt-undiv0.1
Simplified0.1
if 0.957606842952209 < (exp x) Initial program 62.0
Taylor expanded around 0 1.1
Final simplification0.7
herbie shell --seed 2020001
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))