\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.00315224065076235996:\\
\;\;\;\;\frac{1}{\sqrt[3]{1 - \frac{1}{e^{x}}} \cdot \sqrt[3]{1 - \frac{1}{e^{x}}}} \cdot \frac{1}{\sqrt[3]{1 - \frac{1}{e^{x}}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} + \left(\frac{1}{12} \cdot x + \frac{1}{x}\right)\\
\end{array}double f(double x) {
double r107951 = x;
double r107952 = exp(r107951);
double r107953 = 1.0;
double r107954 = r107952 - r107953;
double r107955 = r107952 / r107954;
return r107955;
}
double f(double x) {
double r107956 = x;
double r107957 = exp(r107956);
double r107958 = 0.00315224065076236;
bool r107959 = r107957 <= r107958;
double r107960 = 1.0;
double r107961 = 1.0;
double r107962 = r107961 / r107957;
double r107963 = r107960 - r107962;
double r107964 = cbrt(r107963);
double r107965 = r107964 * r107964;
double r107966 = r107960 / r107965;
double r107967 = r107960 / r107964;
double r107968 = r107966 * r107967;
double r107969 = 0.5;
double r107970 = 0.08333333333333333;
double r107971 = r107970 * r107956;
double r107972 = r107960 / r107956;
double r107973 = r107971 + r107972;
double r107974 = r107969 + r107973;
double r107975 = r107959 ? r107968 : r107974;
return r107975;
}




Bits error versus x
Results
| Original | 41.4 |
|---|---|
| Target | 41.0 |
| Herbie | 0.7 |
if (exp x) < 0.00315224065076236Initial program 0.0
rmApplied clear-num0.0
Simplified0.0
rmApplied add-cube-cbrt0.0
Applied add-cube-cbrt0.0
Applied times-frac0.0
Simplified0.0
Simplified0.0
if 0.00315224065076236 < (exp x) Initial program 61.7
Taylor expanded around 0 1.1
Final simplification0.7
herbie shell --seed 2020047
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))