\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.976097856766479928837532131780108102248 \cdot 10^{-4}:\\
\;\;\;\;\mathsf{fma}\left(\sqrt{e^{x}}, \frac{\sqrt{e^{x}}}{x}, -\frac{1}{x}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, \mathsf{fma}\left(\frac{1}{6}, x, \frac{1}{2}\right), 1\right)\\
\end{array}double f(double x) {
double r3135028 = x;
double r3135029 = exp(r3135028);
double r3135030 = 1.0;
double r3135031 = r3135029 - r3135030;
double r3135032 = r3135031 / r3135028;
return r3135032;
}
double f(double x) {
double r3135033 = x;
double r3135034 = -0.000197609785676648;
bool r3135035 = r3135033 <= r3135034;
double r3135036 = exp(r3135033);
double r3135037 = sqrt(r3135036);
double r3135038 = r3135037 / r3135033;
double r3135039 = 1.0;
double r3135040 = r3135039 / r3135033;
double r3135041 = -r3135040;
double r3135042 = fma(r3135037, r3135038, r3135041);
double r3135043 = 0.16666666666666666;
double r3135044 = 0.5;
double r3135045 = fma(r3135043, r3135033, r3135044);
double r3135046 = 1.0;
double r3135047 = fma(r3135033, r3135045, r3135046);
double r3135048 = r3135035 ? r3135042 : r3135047;
return r3135048;
}




Bits error versus x
| Original | 39.6 |
|---|---|
| Target | 40.0 |
| Herbie | 0.3 |
if x < -0.000197609785676648Initial program 0.0
rmApplied div-sub0.0
rmApplied *-un-lft-identity0.0
Applied add-sqr-sqrt0.0
Applied times-frac0.0
Applied fma-neg0.0
if -0.000197609785676648 < x Initial program 60.0
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.3
herbie shell --seed 2019170 +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))