\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.4964858386511397 \cdot 10^{-4}:\\
\;\;\;\;\frac{1}{\frac{x}{e^{x} - 1}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{12}, {x}^{2}, \mathsf{fma}\left(\frac{1}{3}, x, 1\right)\right) \cdot \mathsf{fma}\left(\frac{1}{36}, {x}^{2}, \mathsf{fma}\left(\frac{1}{6}, x, 1\right)\right)\\
\end{array}double f(double x) {
double r68850 = x;
double r68851 = exp(r68850);
double r68852 = 1.0;
double r68853 = r68851 - r68852;
double r68854 = r68853 / r68850;
return r68854;
}
double f(double x) {
double r68855 = x;
double r68856 = -0.00014964858386511397;
bool r68857 = r68855 <= r68856;
double r68858 = 1.0;
double r68859 = exp(r68855);
double r68860 = 1.0;
double r68861 = r68859 - r68860;
double r68862 = r68855 / r68861;
double r68863 = r68858 / r68862;
double r68864 = 0.08333333333333333;
double r68865 = 2.0;
double r68866 = pow(r68855, r68865);
double r68867 = 0.3333333333333333;
double r68868 = fma(r68867, r68855, r68858);
double r68869 = fma(r68864, r68866, r68868);
double r68870 = 0.027777777777777776;
double r68871 = 0.16666666666666666;
double r68872 = fma(r68871, r68855, r68858);
double r68873 = fma(r68870, r68866, r68872);
double r68874 = r68869 * r68873;
double r68875 = r68857 ? r68863 : r68874;
return r68875;
}




Bits error versus x
| Original | 39.2 |
|---|---|
| Target | 39.6 |
| Herbie | 0.3 |
if x < -0.00014964858386511397Initial program 0.0
rmApplied clear-num0.0
if -0.00014964858386511397 < x Initial program 59.8
Taylor expanded around 0 0.5
Simplified0.5
rmApplied add-cube-cbrt0.5
Taylor expanded around 0 0.5
Simplified0.5
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.3
herbie shell --seed 2020049 +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))