\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.592720854531125653560236221650825427787 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{{\left(e^{x}\right)}^{3} - {1}^{3}}{\mathsf{fma}\left(e^{x}, e^{x} + 1, 1 \cdot 1\right)}}{x}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(x \cdot x, \mathsf{fma}\left(\frac{1}{6}, x, \frac{1}{2}\right), x\right)}{x}\\
\end{array}double f(double x) {
double r69295 = x;
double r69296 = exp(r69295);
double r69297 = 1.0;
double r69298 = r69296 - r69297;
double r69299 = r69298 / r69295;
return r69299;
}
double f(double x) {
double r69300 = x;
double r69301 = -0.00015927208545311257;
bool r69302 = r69300 <= r69301;
double r69303 = exp(r69300);
double r69304 = 3.0;
double r69305 = pow(r69303, r69304);
double r69306 = 1.0;
double r69307 = pow(r69306, r69304);
double r69308 = r69305 - r69307;
double r69309 = r69303 + r69306;
double r69310 = r69306 * r69306;
double r69311 = fma(r69303, r69309, r69310);
double r69312 = r69308 / r69311;
double r69313 = r69312 / r69300;
double r69314 = r69300 * r69300;
double r69315 = 0.16666666666666666;
double r69316 = 0.5;
double r69317 = fma(r69315, r69300, r69316);
double r69318 = fma(r69314, r69317, r69300);
double r69319 = r69318 / r69300;
double r69320 = r69302 ? r69313 : r69319;
return r69320;
}




Bits error versus x
| Original | 40.0 |
|---|---|
| Target | 40.5 |
| Herbie | 0.3 |
if x < -0.00015927208545311257Initial program 0.0
rmApplied flip3--0.0
Simplified0.0
if -0.00015927208545311257 < x Initial program 60.3
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019196 +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))