\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.9688178485685753349443416482245083898306:\\
\;\;\;\;\frac{e^{x}}{e^{x + x} - 1 \cdot 1} \cdot \left(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 r68953 = x;
double r68954 = exp(r68953);
double r68955 = 1.0;
double r68956 = r68954 - r68955;
double r68957 = r68954 / r68956;
return r68957;
}
double f(double x) {
double r68958 = x;
double r68959 = exp(r68958);
double r68960 = 0.9688178485685753;
bool r68961 = r68959 <= r68960;
double r68962 = r68958 + r68958;
double r68963 = exp(r68962);
double r68964 = 1.0;
double r68965 = r68964 * r68964;
double r68966 = r68963 - r68965;
double r68967 = r68959 / r68966;
double r68968 = r68959 + r68964;
double r68969 = r68967 * r68968;
double r68970 = 0.08333333333333333;
double r68971 = 1.0;
double r68972 = r68971 / r68958;
double r68973 = fma(r68970, r68958, r68972);
double r68974 = 0.5;
double r68975 = r68973 + r68974;
double r68976 = r68961 ? r68969 : r68975;
return r68976;
}




Bits error versus x
| Original | 41.2 |
|---|---|
| Target | 40.9 |
| Herbie | 0.5 |
if (exp x) < 0.9688178485685753Initial program 0.0
rmApplied flip--0.0
Applied associate-/r/0.0
Simplified0.0
if 0.9688178485685753 < (exp x) Initial program 61.9
Taylor expanded around 0 0.7
Simplified0.7
Final simplification0.5
herbie shell --seed 2019209 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))