\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;x \le -0.002322584501578668:\\
\;\;\;\;\frac{1}{1 - e^{-x}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} + \mathsf{fma}\left(\frac{1}{12}, x, \left(\frac{1}{x}\right)\right)\\
\end{array}double f(double x) {
double r1399639 = x;
double r1399640 = exp(r1399639);
double r1399641 = 1.0;
double r1399642 = r1399640 - r1399641;
double r1399643 = r1399640 / r1399642;
return r1399643;
}
double f(double x) {
double r1399644 = x;
double r1399645 = -0.002322584501578668;
bool r1399646 = r1399644 <= r1399645;
double r1399647 = 1.0;
double r1399648 = -r1399644;
double r1399649 = exp(r1399648);
double r1399650 = r1399647 - r1399649;
double r1399651 = r1399647 / r1399650;
double r1399652 = 0.5;
double r1399653 = 0.08333333333333333;
double r1399654 = r1399647 / r1399644;
double r1399655 = fma(r1399653, r1399644, r1399654);
double r1399656 = r1399652 + r1399655;
double r1399657 = r1399646 ? r1399651 : r1399656;
return r1399657;
}




Bits error versus x
| Original | 40.3 |
|---|---|
| Target | 39.9 |
| Herbie | 0.6 |
if x < -0.002322584501578668Initial program 0.0
rmApplied expm1-log1p-u0.0
Simplified0.0
rmApplied *-un-lft-identity0.0
Applied associate-/l*0.0
Simplified0.0
if -0.002322584501578668 < x Initial program 60.3
Taylor expanded around 0 0.9
Simplified0.9
Final simplification0.6
herbie shell --seed 2019128 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))