\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 1.166841640166349666900712269954744631923 \cdot 10^{-47}:\\
\;\;\;\;\frac{1}{1 + \sqrt{\frac{1}{e^{x}}}} \cdot \frac{1}{1 - \sqrt{\frac{1}{e^{x}}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2} + \left(\frac{1}{12} \cdot x + \frac{1}{x}\right)\\
\end{array}double f(double x) {
double r70527 = x;
double r70528 = exp(r70527);
double r70529 = 1.0;
double r70530 = r70528 - r70529;
double r70531 = r70528 / r70530;
return r70531;
}
double f(double x) {
double r70532 = x;
double r70533 = exp(r70532);
double r70534 = 1.1668416401663497e-47;
bool r70535 = r70533 <= r70534;
double r70536 = 1.0;
double r70537 = 1.0;
double r70538 = r70537 / r70533;
double r70539 = sqrt(r70538);
double r70540 = r70536 + r70539;
double r70541 = r70536 / r70540;
double r70542 = r70536 - r70539;
double r70543 = r70536 / r70542;
double r70544 = r70541 * r70543;
double r70545 = 0.5;
double r70546 = 0.08333333333333333;
double r70547 = r70546 * r70532;
double r70548 = r70536 / r70532;
double r70549 = r70547 + r70548;
double r70550 = r70545 + r70549;
double r70551 = r70535 ? r70544 : r70550;
return r70551;
}




Bits error versus x
Results
| Original | 41.1 |
|---|---|
| Target | 40.6 |
| Herbie | 0.9 |
if (exp x) < 1.1668416401663497e-47Initial program 0
rmApplied clear-num0.0
Simplified0.0
rmApplied add-sqr-sqrt0.0
Applied add-sqr-sqrt0.0
Applied difference-of-squares0.0
Applied add-cube-cbrt0.0
Applied times-frac0.0
Simplified0.0
Simplified0.0
if 1.1668416401663497e-47 < (exp x) Initial program 61.5
Taylor expanded around 0 1.3
Final simplification0.9
herbie shell --seed 2019322
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))