\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -3416824020916.59033203125 \lor \neg \left(x \le 568.3518365384376238580443896353244781494\right):\\
\;\;\;\;\left(\frac{1}{x} - \frac{1}{{x}^{3}}\right) + \frac{1}{{x}^{5}}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{1}{\mathsf{fma}\left(x, x, 1\right)}\\
\end{array}double f(double x) {
double r67713 = x;
double r67714 = r67713 * r67713;
double r67715 = 1.0;
double r67716 = r67714 + r67715;
double r67717 = r67713 / r67716;
return r67717;
}
double f(double x) {
double r67718 = x;
double r67719 = -3416824020916.5903;
bool r67720 = r67718 <= r67719;
double r67721 = 568.3518365384376;
bool r67722 = r67718 <= r67721;
double r67723 = !r67722;
bool r67724 = r67720 || r67723;
double r67725 = 1.0;
double r67726 = r67725 / r67718;
double r67727 = 1.0;
double r67728 = 3.0;
double r67729 = pow(r67718, r67728);
double r67730 = r67727 / r67729;
double r67731 = r67726 - r67730;
double r67732 = 5.0;
double r67733 = pow(r67718, r67732);
double r67734 = r67727 / r67733;
double r67735 = r67731 + r67734;
double r67736 = fma(r67718, r67718, r67727);
double r67737 = r67725 / r67736;
double r67738 = r67718 * r67737;
double r67739 = r67724 ? r67735 : r67738;
return r67739;
}




Bits error versus x
| Original | 15.5 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -3416824020916.5903 or 568.3518365384376 < x Initial program 31.4
Simplified31.4
Taylor expanded around inf 0.0
Simplified0.0
if -3416824020916.5903 < x < 568.3518365384376Initial program 0.0
Simplified0.0
rmApplied div-inv0.0
Final simplification0.0
herbie shell --seed 2019325 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))