\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;x \le -0.0016580727144551504:\\
\;\;\;\;\frac{e^{x}}{\frac{{\left(e^{x}\right)}^{3} - {1}^{3}}{\mathsf{fma}\left(1, e^{x} + 1, e^{x + x}\right)}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{12}, x, \frac{1}{x}\right) + \frac{1}{2}\\
\end{array}double f(double x) {
double r66714 = x;
double r66715 = exp(r66714);
double r66716 = 1.0;
double r66717 = r66715 - r66716;
double r66718 = r66715 / r66717;
return r66718;
}
double f(double x) {
double r66719 = x;
double r66720 = -0.0016580727144551504;
bool r66721 = r66719 <= r66720;
double r66722 = exp(r66719);
double r66723 = 3.0;
double r66724 = pow(r66722, r66723);
double r66725 = 1.0;
double r66726 = pow(r66725, r66723);
double r66727 = r66724 - r66726;
double r66728 = r66722 + r66725;
double r66729 = r66719 + r66719;
double r66730 = exp(r66729);
double r66731 = fma(r66725, r66728, r66730);
double r66732 = r66727 / r66731;
double r66733 = r66722 / r66732;
double r66734 = 0.08333333333333333;
double r66735 = 1.0;
double r66736 = r66735 / r66719;
double r66737 = fma(r66734, r66719, r66736);
double r66738 = 0.5;
double r66739 = r66737 + r66738;
double r66740 = r66721 ? r66733 : r66739;
return r66740;
}




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