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




Bits error versus x
Results
| Original | 39.7 |
|---|---|
| Target | 40.1 |
| Herbie | 0.3 |
if x < -1.15131307750830373e-4Initial program 0.1
rmApplied flip--_binary64_14000.1
Simplified0.1
rmApplied flip-+_binary64_13990.1
Applied associate-/l/_binary64_13740.1
Simplified0.1
rmApplied add-cube-cbrt_binary64_14570.1
Applied exp-prod_binary64_14740.1
Applied pow-pow_binary64_14940.1
Simplified0.1
if -1.15131307750830373e-4 < x Initial program 60.1
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2020281
(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))