\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.304505555650203115110319362912605356541 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{e^{x + x} - 1 \cdot 1}{e^{x} + 1}}{x}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{6}, x \cdot x, \mathsf{fma}\left(\frac{1}{2}, x, 1\right)\right)\\
\end{array}double f(double x) {
double r82825 = x;
double r82826 = exp(r82825);
double r82827 = 1.0;
double r82828 = r82826 - r82827;
double r82829 = r82828 / r82825;
return r82829;
}
double f(double x) {
double r82830 = x;
double r82831 = -0.0001304505555650203;
bool r82832 = r82830 <= r82831;
double r82833 = r82830 + r82830;
double r82834 = exp(r82833);
double r82835 = 1.0;
double r82836 = r82835 * r82835;
double r82837 = r82834 - r82836;
double r82838 = exp(r82830);
double r82839 = r82838 + r82835;
double r82840 = r82837 / r82839;
double r82841 = r82840 / r82830;
double r82842 = 0.16666666666666666;
double r82843 = r82830 * r82830;
double r82844 = 0.5;
double r82845 = 1.0;
double r82846 = fma(r82844, r82830, r82845);
double r82847 = fma(r82842, r82843, r82846);
double r82848 = r82832 ? r82841 : r82847;
return r82848;
}




Bits error versus x
| Original | 39.9 |
|---|---|
| Target | 40.3 |
| Herbie | 0.4 |
if x < -0.0001304505555650203Initial program 0.0
rmApplied flip--0.0
Simplified0.0
if -0.0001304505555650203 < x Initial program 60.0
Taylor expanded around 0 0.5
Simplified0.5
rmApplied *-un-lft-identity0.5
Final simplification0.4
herbie shell --seed 2019305 +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))