\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.994377561105835306:\\
\;\;\;\;\frac{e^{x}}{\log \left(e^{e^{x} - 1}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} + \left(\frac{1}{12} \cdot x + \frac{1}{x}\right)\\
\end{array}double f(double x) {
double r105978 = x;
double r105979 = exp(r105978);
double r105980 = 1.0;
double r105981 = r105979 - r105980;
double r105982 = r105979 / r105981;
return r105982;
}
double f(double x) {
double r105983 = x;
double r105984 = exp(r105983);
double r105985 = 0.9943775611058353;
bool r105986 = r105984 <= r105985;
double r105987 = 1.0;
double r105988 = r105984 - r105987;
double r105989 = exp(r105988);
double r105990 = log(r105989);
double r105991 = r105984 / r105990;
double r105992 = 0.5;
double r105993 = 0.08333333333333333;
double r105994 = r105993 * r105983;
double r105995 = 1.0;
double r105996 = r105995 / r105983;
double r105997 = r105994 + r105996;
double r105998 = r105992 + r105997;
double r105999 = r105986 ? r105991 : r105998;
return r105999;
}




Bits error versus x
Results
| Original | 41.2 |
|---|---|
| Target | 40.8 |
| Herbie | 0.7 |
if (exp x) < 0.9943775611058353Initial program 0.0
rmApplied add-log-exp0.0
Applied add-log-exp0.0
Applied diff-log0.0
Simplified0.0
if 0.9943775611058353 < (exp x) Initial program 61.9
Taylor expanded around 0 1.0
Final simplification0.7
herbie shell --seed 2020036
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))