\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -2.02234544586829302 \cdot 10^{-4}:\\
\;\;\;\;\frac{\left(\sqrt{1} + \sqrt{e^{x}}\right) \cdot \left(\sqrt{e^{x}} - \sqrt{1}\right)}{x}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{6}, x \cdot x, \mathsf{fma}\left(\frac{1}{2}, x, 1\right)\right)\\
\end{array}double f(double x) {
double r99080 = x;
double r99081 = exp(r99080);
double r99082 = 1.0;
double r99083 = r99081 - r99082;
double r99084 = r99083 / r99080;
return r99084;
}
double f(double x) {
double r99085 = x;
double r99086 = -0.0002022345445868293;
bool r99087 = r99085 <= r99086;
double r99088 = 1.0;
double r99089 = sqrt(r99088);
double r99090 = exp(r99085);
double r99091 = sqrt(r99090);
double r99092 = r99089 + r99091;
double r99093 = r99091 - r99089;
double r99094 = r99092 * r99093;
double r99095 = r99094 / r99085;
double r99096 = 0.16666666666666666;
double r99097 = r99085 * r99085;
double r99098 = 0.5;
double r99099 = 1.0;
double r99100 = fma(r99098, r99085, r99099);
double r99101 = fma(r99096, r99097, r99100);
double r99102 = r99087 ? r99095 : r99101;
return r99102;
}




Bits error versus x
| Original | 40.0 |
|---|---|
| Target | 40.5 |
| Herbie | 0.3 |
if x < -0.0002022345445868293Initial program 0.1
rmApplied add-sqr-sqrt0.1
Applied add-sqr-sqrt0.1
Applied difference-of-squares0.1
Simplified0.1
if -0.0002022345445868293 < x Initial program 60.2
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.3
herbie shell --seed 2020047 +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))