\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -853997951174.7607421875 \lor \neg \left(x \le 529.5974544640389467531349509954452514648\right):\\
\;\;\;\;\left(\frac{1}{x} + \frac{1}{{x}^{5}}\right) - \frac{1}{{x}^{3}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(x, x, 1\right)}\\
\end{array}double f(double x) {
double r46830 = x;
double r46831 = r46830 * r46830;
double r46832 = 1.0;
double r46833 = r46831 + r46832;
double r46834 = r46830 / r46833;
return r46834;
}
double f(double x) {
double r46835 = x;
double r46836 = -853997951174.7607;
bool r46837 = r46835 <= r46836;
double r46838 = 529.597454464039;
bool r46839 = r46835 <= r46838;
double r46840 = !r46839;
bool r46841 = r46837 || r46840;
double r46842 = 1.0;
double r46843 = r46842 / r46835;
double r46844 = 1.0;
double r46845 = 5.0;
double r46846 = pow(r46835, r46845);
double r46847 = r46844 / r46846;
double r46848 = r46843 + r46847;
double r46849 = 3.0;
double r46850 = pow(r46835, r46849);
double r46851 = r46844 / r46850;
double r46852 = r46848 - r46851;
double r46853 = fma(r46835, r46835, r46844);
double r46854 = r46835 / r46853;
double r46855 = r46841 ? r46852 : r46854;
return r46855;
}




Bits error versus x
| Original | 15.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -853997951174.7607 or 529.597454464039 < x Initial program 30.5
Simplified30.5
rmApplied add-sqr-sqrt30.5
Applied associate-/r*30.4
Taylor expanded around inf 0.0
Simplified0.0
if -853997951174.7607 < x < 529.597454464039Initial program 0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))