\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.0649444310352148695963947488962730858475:\\
\;\;\;\;\frac{e^{x}}{{\left(e^{x}\right)}^{3} - {1}^{3}} \cdot \left(e^{x} \cdot e^{x} + \left(1 \cdot 1 + e^{x} \cdot 1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{12}, x, \frac{1}{x}\right) + \frac{1}{2}\\
\end{array}double f(double x) {
double r101093 = x;
double r101094 = exp(r101093);
double r101095 = 1.0;
double r101096 = r101094 - r101095;
double r101097 = r101094 / r101096;
return r101097;
}
double f(double x) {
double r101098 = x;
double r101099 = exp(r101098);
double r101100 = 0.06494443103521487;
bool r101101 = r101099 <= r101100;
double r101102 = 3.0;
double r101103 = pow(r101099, r101102);
double r101104 = 1.0;
double r101105 = pow(r101104, r101102);
double r101106 = r101103 - r101105;
double r101107 = r101099 / r101106;
double r101108 = r101099 * r101099;
double r101109 = r101104 * r101104;
double r101110 = r101099 * r101104;
double r101111 = r101109 + r101110;
double r101112 = r101108 + r101111;
double r101113 = r101107 * r101112;
double r101114 = 0.08333333333333333;
double r101115 = 1.0;
double r101116 = r101115 / r101098;
double r101117 = fma(r101114, r101098, r101116);
double r101118 = 0.5;
double r101119 = r101117 + r101118;
double r101120 = r101101 ? r101113 : r101119;
return r101120;
}




Bits error versus x
| Original | 41.6 |
|---|---|
| Target | 41.2 |
| Herbie | 0.6 |
if (exp x) < 0.06494443103521487Initial program 0.0
rmApplied flip3--0.0
Applied associate-/r/0.0
if 0.06494443103521487 < (exp x) Initial program 61.6
Taylor expanded around 0 0.9
Simplified0.9
Final simplification0.6
herbie shell --seed 2019346 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))