\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -1.186528525688685182001562549656678997394 \cdot 10^{63} \lor \neg \left(x \le 1818.985609970475707086734473705291748047\right):\\
\;\;\;\;\frac{1}{x} + 1 \cdot \left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x \cdot x + 1}\\
\end{array}double f(double x) {
double r56719 = x;
double r56720 = r56719 * r56719;
double r56721 = 1.0;
double r56722 = r56720 + r56721;
double r56723 = r56719 / r56722;
return r56723;
}
double f(double x) {
double r56724 = x;
double r56725 = -1.1865285256886852e+63;
bool r56726 = r56724 <= r56725;
double r56727 = 1818.9856099704757;
bool r56728 = r56724 <= r56727;
double r56729 = !r56728;
bool r56730 = r56726 || r56729;
double r56731 = 1.0;
double r56732 = r56731 / r56724;
double r56733 = 1.0;
double r56734 = 5.0;
double r56735 = pow(r56724, r56734);
double r56736 = r56731 / r56735;
double r56737 = 3.0;
double r56738 = pow(r56724, r56737);
double r56739 = r56731 / r56738;
double r56740 = r56736 - r56739;
double r56741 = r56733 * r56740;
double r56742 = r56732 + r56741;
double r56743 = r56724 * r56724;
double r56744 = r56743 + r56733;
double r56745 = r56724 / r56744;
double r56746 = r56730 ? r56742 : r56745;
return r56746;
}




Bits error versus x
Results
| Original | 14.8 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -1.1865285256886852e+63 or 1818.9856099704757 < x Initial program 32.6
Taylor expanded around inf 0.0
Simplified0.0
if -1.1865285256886852e+63 < x < 1818.9856099704757Initial program 0.0
Final simplification0.0
herbie shell --seed 2019308
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))