\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.668284299855764371729727191251413387363 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{e^{x + x} - 1 \cdot 1}{e^{x} + 1}}{x}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, \mathsf{fma}\left(x, \frac{1}{12}, \frac{1}{3}\right), 1\right) \cdot \mathsf{fma}\left(x, \frac{1}{6} + x \cdot \frac{1}{36}, 1\right)\\
\end{array}double f(double x) {
double r109517 = x;
double r109518 = exp(r109517);
double r109519 = 1.0;
double r109520 = r109518 - r109519;
double r109521 = r109520 / r109517;
return r109521;
}
double f(double x) {
double r109522 = x;
double r109523 = -0.00016682842998557644;
bool r109524 = r109522 <= r109523;
double r109525 = r109522 + r109522;
double r109526 = exp(r109525);
double r109527 = 1.0;
double r109528 = r109527 * r109527;
double r109529 = r109526 - r109528;
double r109530 = exp(r109522);
double r109531 = r109530 + r109527;
double r109532 = r109529 / r109531;
double r109533 = r109532 / r109522;
double r109534 = 0.08333333333333333;
double r109535 = 0.3333333333333333;
double r109536 = fma(r109522, r109534, r109535);
double r109537 = 1.0;
double r109538 = fma(r109522, r109536, r109537);
double r109539 = 0.16666666666666666;
double r109540 = 0.027777777777777776;
double r109541 = r109522 * r109540;
double r109542 = r109539 + r109541;
double r109543 = fma(r109522, r109542, r109537);
double r109544 = r109538 * r109543;
double r109545 = r109524 ? r109533 : r109544;
return r109545;
}




Bits error versus x
| Original | 39.9 |
|---|---|
| Target | 40.4 |
| Herbie | 0.3 |
if x < -0.00016682842998557644Initial program 0.0
rmApplied flip--0.0
Simplified0.0
if -0.00016682842998557644 < x Initial program 60.1
Taylor expanded around 0 0.4
Simplified0.4
rmApplied add-cube-cbrt0.5
Simplified0.5
Simplified0.5
Taylor expanded around 0 0.4
Simplified0.4
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019212 +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))