\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -3.19500256338616044 \cdot 10^{62} \lor \neg \left(x \le 507.01009039307485\right):\\
\;\;\;\;\frac{1}{x} + \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 r61851 = x;
double r61852 = r61851 * r61851;
double r61853 = 1.0;
double r61854 = r61852 + r61853;
double r61855 = r61851 / r61854;
return r61855;
}
double f(double x) {
double r61856 = x;
double r61857 = -3.1950025633861604e+62;
bool r61858 = r61856 <= r61857;
double r61859 = 507.01009039307485;
bool r61860 = r61856 <= r61859;
double r61861 = !r61860;
bool r61862 = r61858 || r61861;
double r61863 = 1.0;
double r61864 = r61863 / r61856;
double r61865 = 1.0;
double r61866 = 5.0;
double r61867 = pow(r61856, r61866);
double r61868 = r61865 / r61867;
double r61869 = 3.0;
double r61870 = pow(r61856, r61869);
double r61871 = r61865 / r61870;
double r61872 = r61868 - r61871;
double r61873 = r61864 + r61872;
double r61874 = r61856 * r61856;
double r61875 = r61874 + r61865;
double r61876 = r61856 / r61875;
double r61877 = r61862 ? r61873 : r61876;
return r61877;
}




Bits error versus x
Results
| Original | 14.6 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -3.1950025633861604e+62 or 507.01009039307485 < x Initial program 33.3
Taylor expanded around inf 0.0
Simplified0.0
if -3.1950025633861604e+62 < x < 507.01009039307485Initial program 0.0
Final simplification0.0
herbie shell --seed 2019195 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:herbie-target
(/ 1.0 (+ x (/ 1.0 x)))
(/ x (+ (* x x) 1.0)))