\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -1025.28762287299992 \lor \neg \left(x \le 764.667521381814254\right):\\
\;\;\;\;\frac{1}{x} - \left(\frac{1}{{x}^{3}} - 1 \cdot \frac{1}{{x}^{5}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{\sqrt{x \cdot x + 1}}}{\sqrt{x \cdot x + 1}}\\
\end{array}double f(double x) {
double r53883 = x;
double r53884 = r53883 * r53883;
double r53885 = 1.0;
double r53886 = r53884 + r53885;
double r53887 = r53883 / r53886;
return r53887;
}
double f(double x) {
double r53888 = x;
double r53889 = -1025.287622873;
bool r53890 = r53888 <= r53889;
double r53891 = 764.6675213818143;
bool r53892 = r53888 <= r53891;
double r53893 = !r53892;
bool r53894 = r53890 || r53893;
double r53895 = 1.0;
double r53896 = r53895 / r53888;
double r53897 = 1.0;
double r53898 = 3.0;
double r53899 = pow(r53888, r53898);
double r53900 = r53897 / r53899;
double r53901 = 5.0;
double r53902 = pow(r53888, r53901);
double r53903 = r53895 / r53902;
double r53904 = r53897 * r53903;
double r53905 = r53900 - r53904;
double r53906 = r53896 - r53905;
double r53907 = r53888 * r53888;
double r53908 = r53907 + r53897;
double r53909 = sqrt(r53908);
double r53910 = r53888 / r53909;
double r53911 = r53910 / r53909;
double r53912 = r53894 ? r53906 : r53911;
return r53912;
}




Bits error versus x
Results
| Original | 15.0 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -1025.287622873 or 764.6675213818143 < x Initial program 30.0
Taylor expanded around inf 0.0
Simplified0.0
if -1025.287622873 < x < 764.6675213818143Initial program 0.0
rmApplied add-sqr-sqrt0.0
Applied associate-/r*0.0
Final simplification0.0
herbie shell --seed 2020065
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))