\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.957041714000110066:\\
\;\;\;\;\frac{e^{x}}{\frac{e^{x + x} - 1 \cdot 1}{e^{x} + 1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{e^{x}}{\mathsf{fma}\left(\frac{1}{2}, {x}^{2}, \mathsf{fma}\left(\frac{1}{6}, {x}^{3}, x\right)\right)}\\
\end{array}double f(double x) {
double r57184 = x;
double r57185 = exp(r57184);
double r57186 = 1.0;
double r57187 = r57185 - r57186;
double r57188 = r57185 / r57187;
return r57188;
}
double f(double x) {
double r57189 = x;
double r57190 = exp(r57189);
double r57191 = 0.9570417140001101;
bool r57192 = r57190 <= r57191;
double r57193 = r57189 + r57189;
double r57194 = exp(r57193);
double r57195 = 1.0;
double r57196 = r57195 * r57195;
double r57197 = r57194 - r57196;
double r57198 = r57190 + r57195;
double r57199 = r57197 / r57198;
double r57200 = r57190 / r57199;
double r57201 = 0.5;
double r57202 = 2.0;
double r57203 = pow(r57189, r57202);
double r57204 = 0.16666666666666666;
double r57205 = 3.0;
double r57206 = pow(r57189, r57205);
double r57207 = fma(r57204, r57206, r57189);
double r57208 = fma(r57201, r57203, r57207);
double r57209 = r57190 / r57208;
double r57210 = r57192 ? r57200 : r57209;
return r57210;
}




Bits error versus x
| Original | 41.0 |
|---|---|
| Target | 40.6 |
| Herbie | 0.7 |
if (exp x) < 0.9570417140001101Initial program 0.0
rmApplied flip--0.0
Simplified0.0
if 0.9570417140001101 < (exp x) Initial program 61.8
Taylor expanded around 0 1.1
Simplified1.1
Final simplification0.7
herbie shell --seed 2020042 +o rules:numerics
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))