\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -1.3559032781469798 \cdot 10^{+154}:\\
\;\;\;\;\left(\frac{1}{{x}^{5}} + \frac{1}{x}\right) - \frac{1}{\left(x \cdot x\right) \cdot x}\\
\mathbf{elif}\;x \le 423.7918602723902:\\
\;\;\;\;\frac{\frac{x}{\sqrt{\mathsf{fma}\left(x, x, 1\right)}}}{\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 r8504284 = x;
double r8504285 = r8504284 * r8504284;
double r8504286 = 1.0;
double r8504287 = r8504285 + r8504286;
double r8504288 = r8504284 / r8504287;
return r8504288;
}
double f(double x) {
double r8504289 = x;
double r8504290 = -1.3559032781469798e+154;
bool r8504291 = r8504289 <= r8504290;
double r8504292 = 1.0;
double r8504293 = 5.0;
double r8504294 = pow(r8504289, r8504293);
double r8504295 = r8504292 / r8504294;
double r8504296 = r8504292 / r8504289;
double r8504297 = r8504295 + r8504296;
double r8504298 = r8504289 * r8504289;
double r8504299 = r8504298 * r8504289;
double r8504300 = r8504292 / r8504299;
double r8504301 = r8504297 - r8504300;
double r8504302 = 423.7918602723902;
bool r8504303 = r8504289 <= r8504302;
double r8504304 = fma(r8504289, r8504289, r8504292);
double r8504305 = sqrt(r8504304);
double r8504306 = r8504289 / r8504305;
double r8504307 = r8504306 / r8504305;
double r8504308 = r8504303 ? r8504307 : r8504301;
double r8504309 = r8504291 ? r8504301 : r8504308;
return r8504309;
}




Bits error versus x
| Original | 15.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -1.3559032781469798e+154 or 423.7918602723902 < x Initial program 39.9
Simplified39.9
rmApplied add-sqr-sqrt39.9
Applied associate-/r*39.8
Taylor expanded around inf 0.0
Simplified0.0
if -1.3559032781469798e+154 < x < 423.7918602723902Initial program 0.1
Simplified0.1
rmApplied add-sqr-sqrt0.1
Applied associate-/r*0.0
Final simplification0.0
herbie shell --seed 2019121 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))