\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -12032692145665368408206631501824 \lor \neg \left(x \le 470.1828671092736726677685510367155075073\right):\\
\;\;\;\;\left(\frac{1}{x} - \frac{1}{{x}^{3}}\right) + \frac{1}{{x}^{5}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(x, x, 1\right)}\\
\end{array}double f(double x) {
double r93550 = x;
double r93551 = r93550 * r93550;
double r93552 = 1.0;
double r93553 = r93551 + r93552;
double r93554 = r93550 / r93553;
return r93554;
}
double f(double x) {
double r93555 = x;
double r93556 = -1.2032692145665368e+31;
bool r93557 = r93555 <= r93556;
double r93558 = 470.1828671092737;
bool r93559 = r93555 <= r93558;
double r93560 = !r93559;
bool r93561 = r93557 || r93560;
double r93562 = 1.0;
double r93563 = r93562 / r93555;
double r93564 = 1.0;
double r93565 = 3.0;
double r93566 = pow(r93555, r93565);
double r93567 = r93564 / r93566;
double r93568 = r93563 - r93567;
double r93569 = 5.0;
double r93570 = pow(r93555, r93569);
double r93571 = r93564 / r93570;
double r93572 = r93568 + r93571;
double r93573 = fma(r93555, r93555, r93564);
double r93574 = r93555 / r93573;
double r93575 = r93561 ? r93572 : r93574;
return r93575;
}




Bits error versus x
| Original | 14.8 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -1.2032692145665368e+31 or 470.1828671092737 < x Initial program 31.6
Simplified31.6
Taylor expanded around inf 0.0
Simplified0.0
if -1.2032692145665368e+31 < x < 470.1828671092737Initial program 0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019304 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))