\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -3116.202715780454127525445073843002319336 \lor \neg \left(x \le 726.4607531112061451494810171425342559814\right):\\
\;\;\;\;\left(\frac{1}{x} - \frac{1}{{x}^{3}}\right) + \frac{1}{{x}^{5}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\sqrt{\mathsf{fma}\left(x, x, 1\right)}} \cdot \frac{x}{\sqrt{\mathsf{fma}\left(x, x, 1\right)}}\\
\end{array}double f(double x) {
double r47742 = x;
double r47743 = r47742 * r47742;
double r47744 = 1.0;
double r47745 = r47743 + r47744;
double r47746 = r47742 / r47745;
return r47746;
}
double f(double x) {
double r47747 = x;
double r47748 = -3116.202715780454;
bool r47749 = r47747 <= r47748;
double r47750 = 726.4607531112061;
bool r47751 = r47747 <= r47750;
double r47752 = !r47751;
bool r47753 = r47749 || r47752;
double r47754 = 1.0;
double r47755 = r47754 / r47747;
double r47756 = 1.0;
double r47757 = 3.0;
double r47758 = pow(r47747, r47757);
double r47759 = r47756 / r47758;
double r47760 = r47755 - r47759;
double r47761 = 5.0;
double r47762 = pow(r47747, r47761);
double r47763 = r47756 / r47762;
double r47764 = r47760 + r47763;
double r47765 = fma(r47747, r47747, r47756);
double r47766 = sqrt(r47765);
double r47767 = r47754 / r47766;
double r47768 = r47747 / r47766;
double r47769 = r47767 * r47768;
double r47770 = r47753 ? r47764 : r47769;
return r47770;
}




Bits error versus x
| Original | 14.6 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -3116.202715780454 or 726.4607531112061 < x Initial program 29.5
rmApplied clear-num29.4
Simplified29.4
Taylor expanded around inf 0.0
Simplified0.0
if -3116.202715780454 < x < 726.4607531112061Initial program 0.0
rmApplied add-sqr-sqrt0.0
Applied *-un-lft-identity0.0
Applied times-frac0.0
Simplified0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019194 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:herbie-target
(/ 1.0 (+ x (/ 1.0 x)))
(/ x (+ (* x x) 1.0)))