\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 2.32657494077244701 \cdot 10^{-52}:\\
\;\;\;\;\frac{e^{x}}{\left(\sqrt{e^{x}} + \sqrt{1}\right) \cdot \left(\sqrt{e^{x}} - \sqrt{1}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} + \left(\frac{1}{12} \cdot x + \frac{1}{x}\right)\\
\end{array}double f(double x) {
double r114234 = x;
double r114235 = exp(r114234);
double r114236 = 1.0;
double r114237 = r114235 - r114236;
double r114238 = r114235 / r114237;
return r114238;
}
double f(double x) {
double r114239 = x;
double r114240 = exp(r114239);
double r114241 = 2.326574940772447e-52;
bool r114242 = r114240 <= r114241;
double r114243 = sqrt(r114240);
double r114244 = 1.0;
double r114245 = sqrt(r114244);
double r114246 = r114243 + r114245;
double r114247 = r114243 - r114245;
double r114248 = r114246 * r114247;
double r114249 = r114240 / r114248;
double r114250 = 0.5;
double r114251 = 0.08333333333333333;
double r114252 = r114251 * r114239;
double r114253 = 1.0;
double r114254 = r114253 / r114239;
double r114255 = r114252 + r114254;
double r114256 = r114250 + r114255;
double r114257 = r114242 ? r114249 : r114256;
return r114257;
}




Bits error versus x
Results
| Original | 40.9 |
|---|---|
| Target | 40.4 |
| Herbie | 0.8 |
if (exp x) < 2.326574940772447e-52Initial program 0
rmApplied add-sqr-sqrt0
Applied add-sqr-sqrt0
Applied difference-of-squares0
if 2.326574940772447e-52 < (exp x) Initial program 61.5
Taylor expanded around 0 1.2
Final simplification0.8
herbie shell --seed 2020020
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))