\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -0.00014547784294540906:\\
\;\;\;\;\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 r3280707 = x;
double r3280708 = exp(r3280707);
double r3280709 = 1.0;
double r3280710 = r3280708 - r3280709;
double r3280711 = r3280710 / r3280707;
return r3280711;
}
double f(double x) {
double r3280712 = x;
double r3280713 = -0.00014547784294540906;
bool r3280714 = r3280712 <= r3280713;
double r3280715 = exp(r3280712);
double r3280716 = r3280715 / r3280712;
double r3280717 = 1.0;
double r3280718 = r3280717 / r3280712;
double r3280719 = r3280716 - r3280718;
double r3280720 = 0.5;
double r3280721 = 0.16666666666666666;
double r3280722 = r3280712 * r3280721;
double r3280723 = r3280720 + r3280722;
double r3280724 = r3280723 * r3280712;
double r3280725 = exp(r3280724);
double r3280726 = log(r3280725);
double r3280727 = r3280717 + r3280726;
double r3280728 = r3280714 ? r3280719 : r3280727;
return r3280728;
}




Bits error versus x
Results
| Original | 39.3 |
|---|---|
| Target | 38.5 |
| Herbie | 0.3 |
if x < -0.00014547784294540906Initial program 0.1
rmApplied div-sub0.1
if -0.00014547784294540906 < x Initial program 60.2
Taylor expanded around 0 0.4
Simplified0.4
rmApplied add-log-exp0.4
Final simplification0.3
herbie shell --seed 2019139
(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))