\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -7878457258558738432 \lor \neg \left(x \le 405.250862702851463836850598454475402832\right):\\
\;\;\;\;\frac{1}{{x}^{5}} + \left(\frac{1}{x} - \frac{1}{{x}^{3}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{\sqrt{\mathsf{fma}\left(x, x, 1\right)}}}{\frac{\mathsf{hypot}\left({1}^{\frac{3}{2}}, {x}^{3}\right)}{\sqrt{\mathsf{fma}\left(1, 1 - x \cdot x, {x}^{4}\right)}}}\\
\end{array}double f(double x) {
double r108969 = x;
double r108970 = r108969 * r108969;
double r108971 = 1.0;
double r108972 = r108970 + r108971;
double r108973 = r108969 / r108972;
return r108973;
}
double f(double x) {
double r108974 = x;
double r108975 = -7.878457258558738e+18;
bool r108976 = r108974 <= r108975;
double r108977 = 405.25086270285146;
bool r108978 = r108974 <= r108977;
double r108979 = !r108978;
bool r108980 = r108976 || r108979;
double r108981 = 1.0;
double r108982 = 5.0;
double r108983 = pow(r108974, r108982);
double r108984 = r108981 / r108983;
double r108985 = 1.0;
double r108986 = r108985 / r108974;
double r108987 = 3.0;
double r108988 = pow(r108974, r108987);
double r108989 = r108981 / r108988;
double r108990 = r108986 - r108989;
double r108991 = r108984 + r108990;
double r108992 = fma(r108974, r108974, r108981);
double r108993 = sqrt(r108992);
double r108994 = r108974 / r108993;
double r108995 = 1.5;
double r108996 = pow(r108981, r108995);
double r108997 = hypot(r108996, r108988);
double r108998 = r108974 * r108974;
double r108999 = r108981 - r108998;
double r109000 = 4.0;
double r109001 = pow(r108974, r109000);
double r109002 = fma(r108981, r108999, r109001);
double r109003 = sqrt(r109002);
double r109004 = r108997 / r109003;
double r109005 = r108994 / r109004;
double r109006 = r108980 ? r108991 : r109005;
return r109006;
}




Bits error versus x
| Original | 14.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -7.878457258558738e+18 or 405.25086270285146 < x Initial program 31.0
Taylor expanded around inf 0.0
Simplified0.0
if -7.878457258558738e+18 < x < 405.25086270285146Initial program 0.0
rmApplied add-sqr-sqrt0.0
Applied associate-/r*0.0
Simplified0.0
rmApplied flip3-+0.0
Applied sqrt-div0.0
Simplified0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019326 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))