\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}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{12}, x, \frac{1}{x}\right) + \frac{1}{2}\\
\end{array}double f(double x) {
double r60338 = x;
double r60339 = exp(r60338);
double r60340 = 1.0;
double r60341 = r60339 - r60340;
double r60342 = r60339 / r60341;
return r60342;
}
double f(double x) {
double r60343 = x;
double r60344 = exp(r60343);
double r60345 = 0.9943775611058353;
bool r60346 = r60344 <= r60345;
double r60347 = 1.0;
double r60348 = r60344 - r60347;
double r60349 = exp(r60348);
double r60350 = log(r60349);
double r60351 = r60344 / r60350;
double r60352 = 0.08333333333333333;
double r60353 = 1.0;
double r60354 = r60353 / r60343;
double r60355 = fma(r60352, r60343, r60354);
double r60356 = 0.5;
double r60357 = r60355 + r60356;
double r60358 = r60346 ? r60351 : r60357;
return r60358;
}




Bits error versus x
| 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
Simplified1.0
Final simplification0.7
herbie shell --seed 2020036 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))