\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;x \le -0.002140507652831692:\\
\;\;\;\;\frac{1}{1 - \frac{1}{e^{x}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{x} + \mathsf{fma}\left(\frac{1}{12}, x, \frac{1}{2}\right)\\
\end{array}double f(double x) {
double r1807782 = x;
double r1807783 = exp(r1807782);
double r1807784 = 1.0;
double r1807785 = r1807783 - r1807784;
double r1807786 = r1807783 / r1807785;
return r1807786;
}
double f(double x) {
double r1807787 = x;
double r1807788 = -0.002140507652831692;
bool r1807789 = r1807787 <= r1807788;
double r1807790 = 1.0;
double r1807791 = exp(r1807787);
double r1807792 = r1807790 / r1807791;
double r1807793 = r1807790 - r1807792;
double r1807794 = r1807790 / r1807793;
double r1807795 = r1807790 / r1807787;
double r1807796 = 0.08333333333333333;
double r1807797 = 0.5;
double r1807798 = fma(r1807796, r1807787, r1807797);
double r1807799 = r1807795 + r1807798;
double r1807800 = r1807789 ? r1807794 : r1807799;
return r1807800;
}




Bits error versus x
| Original | 39.8 |
|---|---|
| Target | 39.3 |
| Herbie | 0.6 |
if x < -0.002140507652831692Initial program 0.0
rmApplied expm1-def0.0
rmApplied clear-num0.0
Simplified0.0
if -0.002140507652831692 < x Initial program 60.1
rmApplied expm1-def0.7
Taylor expanded around 0 0.9
Simplified0.9
Final simplification0.6
herbie shell --seed 2019135 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))