\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -0.00017431816494063913:\\
\;\;\;\;\frac{e^{x}}{x} - \frac{1}{x}\\
\mathbf{else}:\\
\;\;\;\;1 + \log \left(e^{\left(\frac{1}{2} + x \cdot \frac{1}{6}\right) \cdot x}\right)\\
\end{array}double f(double x) {
double r3056896 = x;
double r3056897 = exp(r3056896);
double r3056898 = 1.0;
double r3056899 = r3056897 - r3056898;
double r3056900 = r3056899 / r3056896;
return r3056900;
}
double f(double x) {
double r3056901 = x;
double r3056902 = -0.00017431816494063913;
bool r3056903 = r3056901 <= r3056902;
double r3056904 = exp(r3056901);
double r3056905 = r3056904 / r3056901;
double r3056906 = 1.0;
double r3056907 = r3056906 / r3056901;
double r3056908 = r3056905 - r3056907;
double r3056909 = 0.5;
double r3056910 = 0.16666666666666666;
double r3056911 = r3056901 * r3056910;
double r3056912 = r3056909 + r3056911;
double r3056913 = r3056912 * r3056901;
double r3056914 = exp(r3056913);
double r3056915 = log(r3056914);
double r3056916 = r3056906 + r3056915;
double r3056917 = r3056903 ? r3056908 : r3056916;
return r3056917;
}




Bits error versus x
Results
| Original | 39.7 |
|---|---|
| Target | 38.9 |
| Herbie | 0.4 |
if x < -0.00017431816494063913Initial program 0.1
rmApplied div-sub0.1
if -0.00017431816494063913 < x Initial program 60.0
Taylor expanded around 0 0.5
Simplified0.5
rmApplied add-log-exp0.5
Final simplification0.4
herbie shell --seed 2019141
(FPCore (x)
:name "Kahan's exp quotient"
:herbie-target
(if (and (< x 1) (> x -1)) (/ (- (exp x) 1) (log (exp x))) (/ (- (exp x) 1) x))
(/ (- (exp x) 1) x))