\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -3.195002563386160441668121103642730572028 \cdot 10^{62} \lor \neg \left(x \le 507.0100903930748472703271545469760894775\right):\\
\;\;\;\;\frac{1}{x} - \left(\frac{1}{{x}^{3}} - \frac{1}{{x}^{5}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x \cdot x + 1}\\
\end{array}double f(double x) {
double r63367 = x;
double r63368 = r63367 * r63367;
double r63369 = 1.0;
double r63370 = r63368 + r63369;
double r63371 = r63367 / r63370;
return r63371;
}
double f(double x) {
double r63372 = x;
double r63373 = -3.1950025633861604e+62;
bool r63374 = r63372 <= r63373;
double r63375 = 507.01009039307485;
bool r63376 = r63372 <= r63375;
double r63377 = !r63376;
bool r63378 = r63374 || r63377;
double r63379 = 1.0;
double r63380 = r63379 / r63372;
double r63381 = 1.0;
double r63382 = 3.0;
double r63383 = pow(r63372, r63382);
double r63384 = r63381 / r63383;
double r63385 = 5.0;
double r63386 = pow(r63372, r63385);
double r63387 = r63381 / r63386;
double r63388 = r63384 - r63387;
double r63389 = r63380 - r63388;
double r63390 = r63372 * r63372;
double r63391 = r63390 + r63381;
double r63392 = r63372 / r63391;
double r63393 = r63378 ? r63389 : r63392;
return r63393;
}




Bits error versus x
Results
| Original | 14.6 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -3.1950025633861604e+62 or 507.01009039307485 < x Initial program 33.3
Taylor expanded around inf 0.0
Simplified0.0
if -3.1950025633861604e+62 < x < 507.01009039307485Initial program 0.0
Final simplification0.0
herbie shell --seed 2019195 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:herbie-target
(/ 1.0 (+ x (/ 1.0 x)))
(/ x (+ (* x x) 1.0)))