\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.55293744862148258 \cdot 10^{-4}:\\
\;\;\;\;-1 \cdot \frac{1 - e^{x}}{x}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{6}, {x}^{2}, \mathsf{fma}\left(\frac{1}{2}, x, 1\right)\right)\\
\end{array}double f(double x) {
double r72655 = x;
double r72656 = exp(r72655);
double r72657 = 1.0;
double r72658 = r72656 - r72657;
double r72659 = r72658 / r72655;
return r72659;
}
double f(double x) {
double r72660 = x;
double r72661 = -0.00015529374486214826;
bool r72662 = r72660 <= r72661;
double r72663 = -1.0;
double r72664 = 1.0;
double r72665 = exp(r72660);
double r72666 = r72664 - r72665;
double r72667 = r72666 / r72660;
double r72668 = r72663 * r72667;
double r72669 = 0.16666666666666666;
double r72670 = 2.0;
double r72671 = pow(r72660, r72670);
double r72672 = 0.5;
double r72673 = 1.0;
double r72674 = fma(r72672, r72660, r72673);
double r72675 = fma(r72669, r72671, r72674);
double r72676 = r72662 ? r72668 : r72675;
return r72676;
}




Bits error versus x
| Original | 40.2 |
|---|---|
| Target | 40.7 |
| Herbie | 0.3 |
if x < -0.00015529374486214826Initial program 0.1
Taylor expanded around -inf 0.1
if -0.00015529374486214826 < x Initial program 60.2
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.3
herbie shell --seed 2020003 +o rules:numerics
(FPCore (x)
:name "Kahan's exp quotient"
:precision binary64
:herbie-target
(if (and (< x 1) (> x -1)) (/ (- (exp x) 1) (log (exp x))) (/ (- (exp x) 1) x))
(/ (- (exp x) 1) x))