\frac{e^{x}}{e^{x} - 1}\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.9981680912834135:\\
\;\;\;\;\frac{e^{x}}{\frac{e^{x} \cdot e^{x} - 1}{e^{x} + 1}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{1}{2} + \frac{1}{x}\right) + \left(\sqrt[3]{\frac{1}{12} \cdot x} \cdot \sqrt[3]{\frac{1}{12} \cdot x}\right) \cdot \sqrt[3]{\frac{1}{12} \cdot x}\\
\end{array}double f(double x) {
double r2864098 = x;
double r2864099 = exp(r2864098);
double r2864100 = 1.0;
double r2864101 = r2864099 - r2864100;
double r2864102 = r2864099 / r2864101;
return r2864102;
}
double f(double x) {
double r2864103 = x;
double r2864104 = exp(r2864103);
double r2864105 = 0.9981680912834135;
bool r2864106 = r2864104 <= r2864105;
double r2864107 = r2864104 * r2864104;
double r2864108 = 1.0;
double r2864109 = r2864107 - r2864108;
double r2864110 = r2864104 + r2864108;
double r2864111 = r2864109 / r2864110;
double r2864112 = r2864104 / r2864111;
double r2864113 = 0.5;
double r2864114 = r2864108 / r2864103;
double r2864115 = r2864113 + r2864114;
double r2864116 = 0.08333333333333333;
double r2864117 = r2864116 * r2864103;
double r2864118 = cbrt(r2864117);
double r2864119 = r2864118 * r2864118;
double r2864120 = r2864119 * r2864118;
double r2864121 = r2864115 + r2864120;
double r2864122 = r2864106 ? r2864112 : r2864121;
return r2864122;
}




Bits error versus x
Results
| Original | 39.8 |
|---|---|
| Target | 39.4 |
| Herbie | 0.7 |
if (exp x) < 0.9981680912834135Initial program 0.0
rmApplied flip--0.0
if 0.9981680912834135 < (exp x) Initial program 60.0
Taylor expanded around 0 1.0
rmApplied add-cube-cbrt1.0
Final simplification0.7
herbie shell --seed 2019162
(FPCore (x)
:name "expq2 (section 3.11)"
:herbie-target
(/ 1 (- 1 (exp (- x))))
(/ (exp x) (- (exp x) 1)))