\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.9920261382877882949671288770332466810942:\\
\;\;\;\;\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 r35035 = x;
double r35036 = exp(r35035);
double r35037 = 1.0;
double r35038 = r35036 - r35037;
double r35039 = r35036 / r35038;
return r35039;
}
double f(double x) {
double r35040 = x;
double r35041 = exp(r35040);
double r35042 = 0.9920261382877883;
bool r35043 = r35041 <= r35042;
double r35044 = 1.0;
double r35045 = r35041 - r35044;
double r35046 = exp(r35045);
double r35047 = log(r35046);
double r35048 = r35041 / r35047;
double r35049 = 0.08333333333333333;
double r35050 = 1.0;
double r35051 = r35050 / r35040;
double r35052 = fma(r35049, r35040, r35051);
double r35053 = 0.5;
double r35054 = r35052 + r35053;
double r35055 = r35043 ? r35048 : r35054;
return r35055;
}




Bits error versus x
| Original | 41.3 |
|---|---|
| Target | 40.8 |
| Herbie | 0.7 |
if (exp x) < 0.9920261382877883Initial program 0.0
rmApplied add-log-exp0.0
Applied add-log-exp0.0
Applied diff-log0.0
Simplified0.0
if 0.9920261382877883 < (exp x) Initial program 62.0
Taylor expanded around 0 1.0
Simplified1.0
Final simplification0.7
herbie shell --seed 2019326 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))