\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.681655298641986193575875718764223165635 \cdot 10^{-4}:\\
\;\;\;\;\frac{\log \left(e^{{\left(e^{x}\right)}^{2} - 1 \cdot 1}\right)}{x \cdot \left(e^{x} + 1\right)}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right) + 1\\
\end{array}double f(double x) {
double r232896 = x;
double r232897 = exp(r232896);
double r232898 = 1.0;
double r232899 = r232897 - r232898;
double r232900 = r232899 / r232896;
return r232900;
}
double f(double x) {
double r232901 = x;
double r232902 = -0.00016816552986419862;
bool r232903 = r232901 <= r232902;
double r232904 = exp(r232901);
double r232905 = 2.0;
double r232906 = pow(r232904, r232905);
double r232907 = 1.0;
double r232908 = r232907 * r232907;
double r232909 = r232906 - r232908;
double r232910 = exp(r232909);
double r232911 = log(r232910);
double r232912 = r232904 + r232907;
double r232913 = r232901 * r232912;
double r232914 = r232911 / r232913;
double r232915 = 0.5;
double r232916 = 0.16666666666666666;
double r232917 = r232916 * r232901;
double r232918 = r232915 + r232917;
double r232919 = r232901 * r232918;
double r232920 = 1.0;
double r232921 = r232919 + r232920;
double r232922 = r232903 ? r232914 : r232921;
return r232922;
}




Bits error versus x
Results
| Original | 40.3 |
|---|---|
| Target | 40.8 |
| Herbie | 0.3 |
if x < -0.00016816552986419862Initial program 0.1
rmApplied flip--0.1
Applied associate-/l/0.1
rmApplied add-log-exp0.1
Applied add-log-exp0.1
Applied diff-log0.1
Simplified0.1
if -0.00016816552986419862 < x Initial program 60.3
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019350
(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))