\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 1.47962565206442419 \cdot 10^{-13} \lor \neg \left(e^{x} \le 1.00035730044387416\right):\\
\;\;\;\;\frac{\frac{1}{1 + \sqrt{\frac{1}{e^{x}}}}}{1 - \sqrt{\frac{1}{e^{x}}}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{12}, x, \frac{1}{x}\right) + \frac{1}{2}\\
\end{array}double f(double x) {
double r93845 = x;
double r93846 = exp(r93845);
double r93847 = 1.0;
double r93848 = r93846 - r93847;
double r93849 = r93846 / r93848;
return r93849;
}
double f(double x) {
double r93850 = x;
double r93851 = exp(r93850);
double r93852 = 1.4796256520644242e-13;
bool r93853 = r93851 <= r93852;
double r93854 = 1.0003573004438742;
bool r93855 = r93851 <= r93854;
double r93856 = !r93855;
bool r93857 = r93853 || r93856;
double r93858 = 1.0;
double r93859 = 1.0;
double r93860 = r93859 / r93851;
double r93861 = sqrt(r93860);
double r93862 = r93858 + r93861;
double r93863 = r93858 / r93862;
double r93864 = r93858 - r93861;
double r93865 = r93863 / r93864;
double r93866 = 0.08333333333333333;
double r93867 = r93858 / r93850;
double r93868 = fma(r93866, r93850, r93867);
double r93869 = 0.5;
double r93870 = r93868 + r93869;
double r93871 = r93857 ? r93865 : r93870;
return r93871;
}




Bits error versus x
| Original | 41.4 |
|---|---|
| Target | 41.1 |
| Herbie | 0.2 |
if (exp x) < 1.4796256520644242e-13 or 1.0003573004438742 < (exp x) Initial program 1.2
rmApplied clear-num1.2
Simplified0.1
rmApplied add-sqr-sqrt0.1
Applied *-un-lft-identity0.1
Applied difference-of-squares0.1
Applied associate-/r*0.1
if 1.4796256520644242e-13 < (exp x) < 1.0003573004438742Initial program 62.2
Taylor expanded around 0 0.3
Simplified0.3
Final simplification0.2
herbie shell --seed 2020035 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))