\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.6604344095812133123325760042376941783 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{{1}^{3}}{\frac{\mathsf{fma}\left(1, e^{x} + 1, e^{x + x}\right)}{{\left(e^{x}\right)}^{3} - {1}^{3}}}}{x}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{6}, {x}^{2}, \mathsf{fma}\left(\frac{1}{2}, x, 1\right)\right)\\
\end{array}double f(double x) {
double r116974 = x;
double r116975 = exp(r116974);
double r116976 = 1.0;
double r116977 = r116975 - r116976;
double r116978 = r116977 / r116974;
return r116978;
}
double f(double x) {
double r116979 = x;
double r116980 = -0.00016604344095812133;
bool r116981 = r116979 <= r116980;
double r116982 = 1.0;
double r116983 = 3.0;
double r116984 = pow(r116982, r116983);
double r116985 = 1.0;
double r116986 = exp(r116979);
double r116987 = r116986 + r116985;
double r116988 = r116979 + r116979;
double r116989 = exp(r116988);
double r116990 = fma(r116985, r116987, r116989);
double r116991 = pow(r116986, r116983);
double r116992 = pow(r116985, r116983);
double r116993 = r116991 - r116992;
double r116994 = r116990 / r116993;
double r116995 = r116984 / r116994;
double r116996 = r116995 / r116979;
double r116997 = 0.16666666666666666;
double r116998 = 2.0;
double r116999 = pow(r116979, r116998);
double r117000 = 0.5;
double r117001 = fma(r117000, r116979, r116982);
double r117002 = fma(r116997, r116999, r117001);
double r117003 = r116981 ? r116996 : r117002;
return r117003;
}




Bits error versus x
| Original | 40.0 |
|---|---|
| Target | 40.4 |
| Herbie | 0.3 |
if x < -0.00016604344095812133Initial program 0.0
rmApplied flip3--0.0
Simplified0.0
rmApplied *-un-lft-identity0.0
Applied unpow-prod-down0.0
Applied *-un-lft-identity0.0
Applied unpow-prod-down0.0
Applied distribute-lft-out--0.0
Applied associate-/l*0.0
if -0.00016604344095812133 < x Initial program 60.3
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019353 +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))