\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.670496352740291341569534022681864371407 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{{\left({\left(e^{x}\right)}^{3}\right)}^{3} - {\left({1}^{3}\right)}^{3}}{\mathsf{fma}\left({1}^{3}, {\left(e^{x}\right)}^{3} + {1}^{3}, {\left(e^{x}\right)}^{6}\right)}}{x \cdot \mathsf{fma}\left(1, e^{x} + 1, e^{x + x}\right)}\\
\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 r60002 = x;
double r60003 = exp(r60002);
double r60004 = 1.0;
double r60005 = r60003 - r60004;
double r60006 = r60005 / r60002;
return r60006;
}
double f(double x) {
double r60007 = x;
double r60008 = -0.00016704963527402913;
bool r60009 = r60007 <= r60008;
double r60010 = exp(r60007);
double r60011 = 3.0;
double r60012 = pow(r60010, r60011);
double r60013 = pow(r60012, r60011);
double r60014 = 1.0;
double r60015 = pow(r60014, r60011);
double r60016 = pow(r60015, r60011);
double r60017 = r60013 - r60016;
double r60018 = r60012 + r60015;
double r60019 = 6.0;
double r60020 = pow(r60010, r60019);
double r60021 = fma(r60015, r60018, r60020);
double r60022 = r60017 / r60021;
double r60023 = r60010 + r60014;
double r60024 = r60007 + r60007;
double r60025 = exp(r60024);
double r60026 = fma(r60014, r60023, r60025);
double r60027 = r60007 * r60026;
double r60028 = r60022 / r60027;
double r60029 = 0.16666666666666666;
double r60030 = 0.5;
double r60031 = fma(r60029, r60007, r60030);
double r60032 = 1.0;
double r60033 = fma(r60007, r60031, r60032);
double r60034 = r60009 ? r60028 : r60033;
return r60034;
}




Bits error versus x
| Original | 39.8 |
|---|---|
| Target | 40.2 |
| Herbie | 0.4 |
if x < -0.00016704963527402913Initial program 0.1
rmApplied flip3--0.1
Applied associate-/l/0.1
Simplified0.1
rmApplied flip3--0.1
Simplified0.1
if -0.00016704963527402913 < x Initial program 60.0
Taylor expanded around 0 0.5
Simplified0.5
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.4
herbie shell --seed 2019195 +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))