\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 1.000081178772427970002922847925219684839:\\
\;\;\;\;\frac{e^{x}}{{x}^{2} \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot x\right) + x}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{1 - \frac{1}{e^{x}}}\\
\end{array}double f(double x) {
double r239266 = x;
double r239267 = exp(r239266);
double r239268 = 1.0;
double r239269 = r239267 - r239268;
double r239270 = r239267 / r239269;
return r239270;
}
double f(double x) {
double r239271 = x;
double r239272 = exp(r239271);
double r239273 = 1.000081178772428;
bool r239274 = r239272 <= r239273;
double r239275 = 2.0;
double r239276 = pow(r239271, r239275);
double r239277 = 0.5;
double r239278 = 0.16666666666666666;
double r239279 = r239278 * r239271;
double r239280 = r239277 + r239279;
double r239281 = r239276 * r239280;
double r239282 = r239281 + r239271;
double r239283 = r239272 / r239282;
double r239284 = 1.0;
double r239285 = 1.0;
double r239286 = r239285 / r239272;
double r239287 = r239284 - r239286;
double r239288 = r239284 / r239287;
double r239289 = r239274 ? r239283 : r239288;
return r239289;
}




Bits error versus x
Results
| Original | 41.4 |
|---|---|
| Target | 41.0 |
| Herbie | 0.4 |
if (exp x) < 1.000081178772428Initial program 41.5
Taylor expanded around 0 11.3
Simplified0.4
if 1.000081178772428 < (exp x) Initial program 31.5
rmApplied clear-num31.6
Simplified1.5
Final simplification0.4
herbie shell --seed 2019291
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))