\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.392605479495764375999500295222333079437 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{{\left(e^{x}\right)}^{3} - {1}^{3}}{\mathsf{fma}\left(1, e^{x} + 1, e^{x + x}\right)}}{x}\\
\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 r62517 = x;
double r62518 = exp(r62517);
double r62519 = 1.0;
double r62520 = r62518 - r62519;
double r62521 = r62520 / r62517;
return r62521;
}
double f(double x) {
double r62522 = x;
double r62523 = -0.00013926054794957644;
bool r62524 = r62522 <= r62523;
double r62525 = exp(r62522);
double r62526 = 3.0;
double r62527 = pow(r62525, r62526);
double r62528 = 1.0;
double r62529 = pow(r62528, r62526);
double r62530 = r62527 - r62529;
double r62531 = r62525 + r62528;
double r62532 = r62522 + r62522;
double r62533 = exp(r62532);
double r62534 = fma(r62528, r62531, r62533);
double r62535 = r62530 / r62534;
double r62536 = r62535 / r62522;
double r62537 = 0.16666666666666666;
double r62538 = 0.5;
double r62539 = fma(r62537, r62522, r62538);
double r62540 = 1.0;
double r62541 = fma(r62522, r62539, r62540);
double r62542 = r62524 ? r62536 : r62541;
return r62542;
}




Bits error versus x
| Original | 39.7 |
|---|---|
| Target | 40.0 |
| Herbie | 0.3 |
if x < -0.00013926054794957644Initial program 0.1
rmApplied flip3--0.1
Simplified0.1
if -0.00013926054794957644 < x Initial program 59.9
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019347 +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))