double f(double x) {
double r4702280 = x;
double r4702281 = exp(r4702280);
double r4702282 = 1.0;
double r4702283 = r4702281 - r4702282;
double r4702284 = r4702283 / r4702280;
return r4702284;
}
double f(double x) {
double r4702285 = x;
double r4702286 = -0.00011016449422371341;
bool r4702287 = r4702285 <= r4702286;
double r4702288 = exp(r4702285);
double r4702289 = 1.0;
double r4702290 = r4702288 - r4702289;
double r4702291 = r4702289 / r4702285;
double r4702292 = r4702290 * r4702291;
double r4702293 = 0.5;
double r4702294 = r4702293 * r4702285;
double r4702295 = 0.16666666666666666;
double r4702296 = r4702285 * r4702295;
double r4702297 = r4702296 * r4702285;
double r4702298 = r4702297 + r4702289;
double r4702299 = r4702294 + r4702298;
double r4702300 = r4702287 ? r4702292 : r4702299;
return r4702300;
}
\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -0.00011016449422371341:\\
\;\;\;\;\left(e^{x} - 1\right) \cdot \frac{1}{x}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} \cdot x + \left(\left(x \cdot \frac{1}{6}\right) \cdot x + 1\right)\\
\end{array}



Bits error versus x
| Original | 40.0 |
|---|---|
| Target | 39.2 |
| Herbie | 0.3 |
if x < -0.00011016449422371341Initial program 0.1
rmApplied div-inv0.1
if -0.00011016449422371341 < x Initial program 60.2
Taylor expanded around 0 0.5
Simplified0.5
rmApplied distribute-lft-in0.5
Applied associate-+r+0.5
Final simplification0.3
herbie shell --seed 2019102
(FPCore (x)
:name "Kahan's exp quotient"
:herbie-target
(if (and (< x 1) (> x -1)) (/ (- (exp x) 1) (log (exp x))) (/ (- (exp x) 1) x))
(/ (- (exp x) 1) x))