\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -36392348527513.984375 \lor \neg \left(x \le 2834276.9391883411444723606109619140625\right):\\
\;\;\;\;\left(\frac{1}{x} - \frac{1}{{x}^{3}}\right) + \frac{1}{{x}^{5}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(x, x, 1\right)}\\
\end{array}double f(double x) {
double r97717 = x;
double r97718 = r97717 * r97717;
double r97719 = 1.0;
double r97720 = r97718 + r97719;
double r97721 = r97717 / r97720;
return r97721;
}
double f(double x) {
double r97722 = x;
double r97723 = -36392348527513.984;
bool r97724 = r97722 <= r97723;
double r97725 = 2834276.939188341;
bool r97726 = r97722 <= r97725;
double r97727 = !r97726;
bool r97728 = r97724 || r97727;
double r97729 = 1.0;
double r97730 = r97729 / r97722;
double r97731 = 1.0;
double r97732 = 3.0;
double r97733 = pow(r97722, r97732);
double r97734 = r97731 / r97733;
double r97735 = r97730 - r97734;
double r97736 = 5.0;
double r97737 = pow(r97722, r97736);
double r97738 = r97731 / r97737;
double r97739 = r97735 + r97738;
double r97740 = fma(r97722, r97722, r97731);
double r97741 = r97722 / r97740;
double r97742 = r97728 ? r97739 : r97741;
return r97742;
}




Bits error versus x
| Original | 15.3 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -36392348527513.984 or 2834276.939188341 < x Initial program 31.7
Simplified31.7
Taylor expanded around inf 0.0
Simplified0.0
if -36392348527513.984 < x < 2834276.939188341Initial program 0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019347 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))