\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.66490381328880487 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{{\left(e^{x}\right)}^{4} - {1}^{4}}{\mathsf{fma}\left(1, 1, e^{2 \cdot x}\right)}}{x \cdot \left(e^{x} + 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, \mathsf{fma}\left(x, \frac{1}{6}, \frac{1}{2}\right), 1\right)\\
\end{array}double f(double x) {
double r120075 = x;
double r120076 = exp(r120075);
double r120077 = 1.0;
double r120078 = r120076 - r120077;
double r120079 = r120078 / r120075;
return r120079;
}
double f(double x) {
double r120080 = x;
double r120081 = -0.0001664903813288805;
bool r120082 = r120080 <= r120081;
double r120083 = exp(r120080);
double r120084 = 4.0;
double r120085 = pow(r120083, r120084);
double r120086 = 1.0;
double r120087 = pow(r120086, r120084);
double r120088 = r120085 - r120087;
double r120089 = 2.0;
double r120090 = r120089 * r120080;
double r120091 = exp(r120090);
double r120092 = fma(r120086, r120086, r120091);
double r120093 = r120088 / r120092;
double r120094 = r120083 + r120086;
double r120095 = r120080 * r120094;
double r120096 = r120093 / r120095;
double r120097 = 0.16666666666666666;
double r120098 = 0.5;
double r120099 = fma(r120080, r120097, r120098);
double r120100 = 1.0;
double r120101 = fma(r120080, r120099, r120100);
double r120102 = r120082 ? r120096 : r120101;
return r120102;
}




Bits error versus x
| Original | 39.2 |
|---|---|
| Target | 39.6 |
| Herbie | 0.3 |
if x < -0.0001664903813288805Initial program 0.0
rmApplied flip--0.0
Applied associate-/l/0.0
rmApplied flip--0.0
Simplified0.0
Simplified0.0
if -0.0001664903813288805 < x Initial program 60.0
Taylor expanded around 0 0.5
Simplified0.5
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.3
herbie shell --seed 2020043 +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))