\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -542649.79826615541242063045501708984375 \lor \neg \left(x \le 904431.560700487927533686161041259765625\right):\\
\;\;\;\;\mathsf{fma}\left(1, \frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}, \frac{1}{x}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(-1, 1, {x}^{4}\right)} \cdot \left(x \cdot x - 1\right)\\
\end{array}double f(double x) {
double r59868 = x;
double r59869 = r59868 * r59868;
double r59870 = 1.0;
double r59871 = r59869 + r59870;
double r59872 = r59868 / r59871;
return r59872;
}
double f(double x) {
double r59873 = x;
double r59874 = -542649.7982661554;
bool r59875 = r59873 <= r59874;
double r59876 = 904431.5607004879;
bool r59877 = r59873 <= r59876;
double r59878 = !r59877;
bool r59879 = r59875 || r59878;
double r59880 = 1.0;
double r59881 = 1.0;
double r59882 = 5.0;
double r59883 = pow(r59873, r59882);
double r59884 = r59881 / r59883;
double r59885 = 3.0;
double r59886 = pow(r59873, r59885);
double r59887 = r59881 / r59886;
double r59888 = r59884 - r59887;
double r59889 = r59881 / r59873;
double r59890 = fma(r59880, r59888, r59889);
double r59891 = -r59880;
double r59892 = 4.0;
double r59893 = pow(r59873, r59892);
double r59894 = fma(r59891, r59880, r59893);
double r59895 = r59873 / r59894;
double r59896 = r59873 * r59873;
double r59897 = r59896 - r59880;
double r59898 = r59895 * r59897;
double r59899 = r59879 ? r59890 : r59898;
return r59899;
}




Bits error versus x
| Original | 15.5 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -542649.7982661554 or 904431.5607004879 < x Initial program 31.3
Taylor expanded around inf 0.0
Simplified0.0
if -542649.7982661554 < x < 904431.5607004879Initial program 0.0
rmApplied flip-+0.0
Applied associate-/r/0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019353 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))