\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.383162727126432478899631384194890415529 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(-1, 1, e^{x + x}\right)}{e^{x} + 1}}{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 r93763 = x;
double r93764 = exp(r93763);
double r93765 = 1.0;
double r93766 = r93764 - r93765;
double r93767 = r93766 / r93763;
return r93767;
}
double f(double x) {
double r93768 = x;
double r93769 = -0.00013831627271264325;
bool r93770 = r93768 <= r93769;
double r93771 = 1.0;
double r93772 = -r93771;
double r93773 = r93768 + r93768;
double r93774 = exp(r93773);
double r93775 = fma(r93772, r93771, r93774);
double r93776 = exp(r93768);
double r93777 = r93776 + r93771;
double r93778 = r93775 / r93777;
double r93779 = r93778 / r93768;
double r93780 = 0.16666666666666666;
double r93781 = 2.0;
double r93782 = pow(r93768, r93781);
double r93783 = 0.5;
double r93784 = 1.0;
double r93785 = fma(r93783, r93768, r93784);
double r93786 = fma(r93780, r93782, r93785);
double r93787 = r93770 ? r93779 : r93786;
return r93787;
}




Bits error versus x
| Original | 39.9 |
|---|---|
| Target | 40.4 |
| Herbie | 0.4 |
if x < -0.00013831627271264325Initial program 0.0
rmApplied flip--0.0
Simplified0.0
if -0.00013831627271264325 < x Initial program 60.2
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.4
herbie shell --seed 2020001 +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))