\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.7678424985434889 \cdot 10^{-4}:\\
\;\;\;\;\frac{e^{x} - 1}{x}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left({x}^{2}, \mathsf{fma}\left(x, \frac{1}{6}, \frac{1}{2}\right), x\right)}{x}\\
\end{array}double f(double x) {
double r93909 = x;
double r93910 = exp(r93909);
double r93911 = 1.0;
double r93912 = r93910 - r93911;
double r93913 = r93912 / r93909;
return r93913;
}
double f(double x) {
double r93914 = x;
double r93915 = -0.0001767842498543489;
bool r93916 = r93914 <= r93915;
double r93917 = exp(r93914);
double r93918 = 1.0;
double r93919 = r93917 - r93918;
double r93920 = r93919 / r93914;
double r93921 = 2.0;
double r93922 = pow(r93914, r93921);
double r93923 = 0.16666666666666666;
double r93924 = 0.5;
double r93925 = fma(r93914, r93923, r93924);
double r93926 = fma(r93922, r93925, r93914);
double r93927 = r93926 / r93914;
double r93928 = r93916 ? r93920 : r93927;
return r93928;
}




Bits error versus x
| Original | 39.8 |
|---|---|
| Target | 40.4 |
| Herbie | 0.3 |
if x < -0.0001767842498543489Initial program 0.0
if -0.0001767842498543489 < x Initial program 60.4
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019199 +o rules:numerics
(FPCore (x)
:name "Kahan's exp quotient"
: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))