\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.00315224065076235996:\\
\;\;\;\;\frac{\sqrt{e^{x}}}{\frac{e^{x} - 1}{\sqrt{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 r98137 = x;
double r98138 = exp(r98137);
double r98139 = 1.0;
double r98140 = r98138 - r98139;
double r98141 = r98138 / r98140;
return r98141;
}
double f(double x) {
double r98142 = x;
double r98143 = exp(r98142);
double r98144 = 0.00315224065076236;
bool r98145 = r98143 <= r98144;
double r98146 = sqrt(r98143);
double r98147 = 1.0;
double r98148 = r98143 - r98147;
double r98149 = r98148 / r98146;
double r98150 = r98146 / r98149;
double r98151 = 0.08333333333333333;
double r98152 = 1.0;
double r98153 = r98152 / r98142;
double r98154 = fma(r98151, r98142, r98153);
double r98155 = 0.5;
double r98156 = r98154 + r98155;
double r98157 = r98145 ? r98150 : r98156;
return r98157;
}




Bits error versus x
| Original | 41.4 |
|---|---|
| Target | 41.0 |
| Herbie | 0.7 |
if (exp x) < 0.00315224065076236Initial program 0.0
rmApplied add-sqr-sqrt0.0
Applied associate-/l*0.0
if 0.00315224065076236 < (exp x) Initial program 61.7
Taylor expanded around 0 1.1
Simplified1.1
Final simplification0.7
herbie shell --seed 2020047 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))