\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.0:\\
\;\;\;\;\frac{1}{1 - \frac{1}{e^{x}}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{12}, x, \frac{1}{x}\right) + \frac{1}{2}\\
\end{array}double f(double x) {
double r128317 = x;
double r128318 = exp(r128317);
double r128319 = 1.0;
double r128320 = r128318 - r128319;
double r128321 = r128318 / r128320;
return r128321;
}
double f(double x) {
double r128322 = x;
double r128323 = exp(r128322);
double r128324 = 0.0;
bool r128325 = r128323 <= r128324;
double r128326 = 1.0;
double r128327 = 1.0;
double r128328 = r128327 / r128323;
double r128329 = r128326 - r128328;
double r128330 = r128326 / r128329;
double r128331 = 0.08333333333333333;
double r128332 = r128326 / r128322;
double r128333 = fma(r128331, r128322, r128332);
double r128334 = 0.5;
double r128335 = r128333 + r128334;
double r128336 = r128325 ? r128330 : r128335;
return r128336;
}




Bits error versus x
| Original | 40.8 |
|---|---|
| Target | 40.4 |
| Herbie | 0.8 |
if (exp x) < 0.0Initial program 0
rmApplied clear-num0
Simplified0
if 0.0 < (exp x) Initial program 61.2
Taylor expanded around 0 1.3
Simplified1.3
Final simplification0.8
herbie shell --seed 2020045 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))