\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 1.0000164897469046:\\
\;\;\;\;\frac{e^{x}}{{x}^{2} \cdot \left(x \cdot \frac{1}{6} + \frac{1}{2}\right) + x}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{1 - \frac{1}{e^{x}}}\\
\end{array}double f(double x) {
double r80751 = x;
double r80752 = exp(r80751);
double r80753 = 1.0;
double r80754 = r80752 - r80753;
double r80755 = r80752 / r80754;
return r80755;
}
double f(double x) {
double r80756 = x;
double r80757 = exp(r80756);
double r80758 = 1.0000164897469046;
bool r80759 = r80757 <= r80758;
double r80760 = 2.0;
double r80761 = pow(r80756, r80760);
double r80762 = 0.16666666666666666;
double r80763 = r80756 * r80762;
double r80764 = 0.5;
double r80765 = r80763 + r80764;
double r80766 = r80761 * r80765;
double r80767 = r80766 + r80756;
double r80768 = r80757 / r80767;
double r80769 = 1.0;
double r80770 = 1.0;
double r80771 = r80770 / r80757;
double r80772 = r80769 - r80771;
double r80773 = r80769 / r80772;
double r80774 = r80759 ? r80768 : r80773;
return r80774;
}




Bits error versus x
Results
| Original | 41.5 |
|---|---|
| Target | 40.9 |
| Herbie | 0.3 |
if (exp x) < 1.0000164897469046Initial program 41.6
Taylor expanded around 0 10.6
Simplified0.3
if 1.0000164897469046 < (exp x) Initial program 37.2
rmApplied clear-num37.2
Simplified2.1
Final simplification0.3
herbie shell --seed 2020064
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))