\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 r69095 = x;
double r69096 = exp(r69095);
double r69097 = 1.0;
double r69098 = r69096 - r69097;
double r69099 = r69096 / r69098;
return r69099;
}
double f(double x) {
double r69100 = x;
double r69101 = exp(r69100);
double r69102 = 0.9570417140001101;
bool r69103 = r69101 <= r69102;
double r69104 = r69100 + r69100;
double r69105 = exp(r69104);
double r69106 = 1.0;
double r69107 = r69106 * r69106;
double r69108 = r69105 - r69107;
double r69109 = r69101 + r69106;
double r69110 = r69108 / r69109;
double r69111 = r69101 / r69110;
double r69112 = 0.5;
double r69113 = 2.0;
double r69114 = pow(r69100, r69113);
double r69115 = 0.16666666666666666;
double r69116 = 3.0;
double r69117 = pow(r69100, r69116);
double r69118 = fma(r69115, r69117, r69100);
double r69119 = fma(r69112, r69114, r69118);
double r69120 = r69101 / r69119;
double r69121 = r69103 ? r69111 : r69120;
return r69121;
}




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)))