\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -61349745.21847331:\\
\;\;\;\;\left(\frac{1}{{x}^{5}} + \frac{1}{x}\right) - \frac{1}{\left(x \cdot x\right) \cdot x}\\
\mathbf{elif}\;x \le 405.32013382536394:\\
\;\;\;\;\frac{x}{\sqrt{\mathsf{fma}\left(x, x, 1\right)}} \cdot \frac{1}{\sqrt{\mathsf{fma}\left(x, x, 1\right)}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{1}{{x}^{5}} + \frac{1}{x}\right) - \frac{1}{\left(x \cdot x\right) \cdot x}\\
\end{array}double f(double x) {
double r9565955 = x;
double r9565956 = r9565955 * r9565955;
double r9565957 = 1.0;
double r9565958 = r9565956 + r9565957;
double r9565959 = r9565955 / r9565958;
return r9565959;
}
double f(double x) {
double r9565960 = x;
double r9565961 = -61349745.21847331;
bool r9565962 = r9565960 <= r9565961;
double r9565963 = 1.0;
double r9565964 = 5.0;
double r9565965 = pow(r9565960, r9565964);
double r9565966 = r9565963 / r9565965;
double r9565967 = r9565963 / r9565960;
double r9565968 = r9565966 + r9565967;
double r9565969 = r9565960 * r9565960;
double r9565970 = r9565969 * r9565960;
double r9565971 = r9565963 / r9565970;
double r9565972 = r9565968 - r9565971;
double r9565973 = 405.32013382536394;
bool r9565974 = r9565960 <= r9565973;
double r9565975 = fma(r9565960, r9565960, r9565963);
double r9565976 = sqrt(r9565975);
double r9565977 = r9565960 / r9565976;
double r9565978 = r9565963 / r9565976;
double r9565979 = r9565977 * r9565978;
double r9565980 = r9565974 ? r9565979 : r9565972;
double r9565981 = r9565962 ? r9565972 : r9565980;
return r9565981;
}




Bits error versus x
| Original | 14.7 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -61349745.21847331 or 405.32013382536394 < x Initial program 30.1
Simplified30.1
Taylor expanded around inf 0.0
Simplified0.0
if -61349745.21847331 < x < 405.32013382536394Initial program 0.0
Simplified0.0
rmApplied add-sqr-sqrt0.0
Applied *-un-lft-identity0.0
Applied times-frac0.0
Final simplification0.0
herbie shell --seed 2019125 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))