\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.338894298495746 \cdot 10^{-4}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(-1, 1, e^{x + x}\right)}{e^{x} \cdot e^{x} - 1 \cdot 1}}{\frac{x}{e^{x} - 1}}\\
\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 r79819 = x;
double r79820 = exp(r79819);
double r79821 = 1.0;
double r79822 = r79820 - r79821;
double r79823 = r79822 / r79819;
return r79823;
}
double f(double x) {
double r79824 = x;
double r79825 = -0.0001338894298495746;
bool r79826 = r79824 <= r79825;
double r79827 = 1.0;
double r79828 = -r79827;
double r79829 = r79824 + r79824;
double r79830 = exp(r79829);
double r79831 = fma(r79828, r79827, r79830);
double r79832 = exp(r79824);
double r79833 = r79832 * r79832;
double r79834 = r79827 * r79827;
double r79835 = r79833 - r79834;
double r79836 = r79831 / r79835;
double r79837 = r79832 - r79827;
double r79838 = r79824 / r79837;
double r79839 = r79836 / r79838;
double r79840 = 0.16666666666666666;
double r79841 = 2.0;
double r79842 = pow(r79824, r79841);
double r79843 = 0.5;
double r79844 = 1.0;
double r79845 = fma(r79843, r79824, r79844);
double r79846 = fma(r79840, r79842, r79845);
double r79847 = r79826 ? r79839 : r79846;
return r79847;
}




Bits error versus x
| Original | 39.5 |
|---|---|
| Target | 39.9 |
| Herbie | 0.2 |
if x < -0.0001338894298495746Initial program 0.1
rmApplied flip--0.1
Simplified0.1
rmApplied flip-+0.1
Applied associate-/r/0.1
Applied associate-/l*0.1
if -0.0001338894298495746 < x Initial program 60.2
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.2
herbie shell --seed 2020020 +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))