\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;x \leq -0.0016413502069231225:\\
\;\;\;\;\sqrt{e^{x} + 1} \cdot \frac{\sqrt{e^{x} + 1}}{e^{x} - e^{-x}}\\
\mathbf{else}:\\
\;\;\;\;0.5 + \left(x \cdot 0.08333333333333333 + \frac{1}{x}\right)\\
\end{array}(FPCore (x) :precision binary64 (/ (exp x) (- (exp x) 1.0)))
(FPCore (x)
:precision binary64
(if (<= x -0.0016413502069231225)
(*
(sqrt (+ (exp x) 1.0))
(/ (sqrt (+ (exp x) 1.0)) (- (exp x) (exp (- x)))))
(+ 0.5 (+ (* x 0.08333333333333333) (/ 1.0 x)))))double code(double x) {
return exp(x) / (exp(x) - 1.0);
}
double code(double x) {
double tmp;
if (x <= -0.0016413502069231225) {
tmp = sqrt(exp(x) + 1.0) * (sqrt(exp(x) + 1.0) / (exp(x) - exp(-x)));
} else {
tmp = 0.5 + ((x * 0.08333333333333333) + (1.0 / x));
}
return tmp;
}




Bits error versus x
Results
| Original | 41.1 |
|---|---|
| Target | 40.7 |
| Herbie | 0.7 |
if x < -0.0016413502069231225Initial program 0.0
rmApplied flip--_binary640.0
Applied associate-/r/_binary640.0
Simplified0.0
rmApplied add-sqr-sqrt_binary640.0
Applied associate-*r*_binary640.0
Simplified0.0
if -0.0016413502069231225 < x Initial program 61.7
Taylor expanded around 0 1.0
Simplified1.0
Final simplification0.7
herbie shell --seed 2020232
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1.0 (- 1.0 (exp (- x))))
(/ (exp x) (- (exp x) 1.0)))