\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.9920261382877882949671288770332466810942:\\
\;\;\;\;\frac{e^{x}}{\log \left(e^{e^{x} - 1}\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{12}, x, \frac{1}{x}\right) + \frac{1}{2}\\
\end{array}double f(double x) {
double r36940 = x;
double r36941 = exp(r36940);
double r36942 = 1.0;
double r36943 = r36941 - r36942;
double r36944 = r36941 / r36943;
return r36944;
}
double f(double x) {
double r36945 = x;
double r36946 = exp(r36945);
double r36947 = 0.9920261382877883;
bool r36948 = r36946 <= r36947;
double r36949 = 1.0;
double r36950 = r36946 - r36949;
double r36951 = exp(r36950);
double r36952 = log(r36951);
double r36953 = r36946 / r36952;
double r36954 = 0.08333333333333333;
double r36955 = 1.0;
double r36956 = r36955 / r36945;
double r36957 = fma(r36954, r36945, r36956);
double r36958 = 0.5;
double r36959 = r36957 + r36958;
double r36960 = r36948 ? r36953 : r36959;
return r36960;
}




Bits error versus x
| Original | 41.3 |
|---|---|
| Target | 40.8 |
| Herbie | 0.7 |
if (exp x) < 0.9920261382877883Initial program 0.0
rmApplied add-log-exp0.0
Applied add-log-exp0.0
Applied diff-log0.0
Simplified0.0
if 0.9920261382877883 < (exp x) Initial program 62.0
Taylor expanded around 0 1.0
Simplified1.0
Final simplification0.7
herbie shell --seed 2019326 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))