\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \leq -0.0013751438330752465:\\
\;\;\;\;\frac{\left(1 + \sqrt{e^{x}}\right) \cdot \frac{-1 + {\left(\sqrt{e^{x}}\right)}^{3}}{1 + \left(\sqrt{e^{x}} + \sqrt{e^{x}} \cdot \sqrt{e^{x}}\right)}}{x}\\
\mathbf{else}:\\
\;\;\;\;x \cdot 0.5 + \left(0.16666666666666666 \cdot {x}^{2} + \left(1 + 0.041666666666666664 \cdot {x}^{3}\right)\right)\\
\end{array}(FPCore (x) :precision binary64 (/ (- (exp x) 1.0) x))
(FPCore (x)
:precision binary64
(if (<= x -0.0013751438330752465)
(/
(*
(+ 1.0 (sqrt (exp x)))
(/
(+ -1.0 (pow (sqrt (exp x)) 3.0))
(+ 1.0 (+ (sqrt (exp x)) (* (sqrt (exp x)) (sqrt (exp x)))))))
x)
(+
(* x 0.5)
(+
(* 0.16666666666666666 (pow x 2.0))
(+ 1.0 (* 0.041666666666666664 (pow x 3.0)))))))double code(double x) {
return (exp(x) - 1.0) / x;
}
double code(double x) {
double tmp;
if (x <= -0.0013751438330752465) {
tmp = ((1.0 + sqrt(exp(x))) * ((-1.0 + pow(sqrt(exp(x)), 3.0)) / (1.0 + (sqrt(exp(x)) + (sqrt(exp(x)) * sqrt(exp(x))))))) / x;
} else {
tmp = (x * 0.5) + ((0.16666666666666666 * pow(x, 2.0)) + (1.0 + (0.041666666666666664 * pow(x, 3.0))));
}
return tmp;
}




Bits error versus x
Results
| Original | 39.6 |
|---|---|
| Target | 40.0 |
| Herbie | 0.3 |
if x < -0.0013751438330752465Initial program 0.0
rmApplied add-sqr-sqrt_binary64_31690.0
Applied difference-of-sqr-1_binary64_31170.0
Simplified0.0
Simplified0.0
rmApplied flip3-+_binary64_31500.0
if -0.0013751438330752465 < x Initial program 60.0
Taylor expanded around 0 0.4
Final simplification0.3
herbie shell --seed 2021096
(FPCore (x)
:name "Kahan's exp quotient"
:precision binary64
:herbie-target
(if (and (< x 1.0) (> x -1.0)) (/ (- (exp x) 1.0) (log (exp x))) (/ (- (exp x) 1.0) x))
(/ (- (exp x) 1.0) x))