\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -3416824020916.59033203125 \lor \neg \left(x \le 780.2110112890140953822992742061614990234\right):\\
\;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{1}{\mathsf{fma}\left(x, x, 1\right)}\\
\end{array}double f(double x) {
double r97317 = x;
double r97318 = r97317 * r97317;
double r97319 = 1.0;
double r97320 = r97318 + r97319;
double r97321 = r97317 / r97320;
return r97321;
}
double f(double x) {
double r97322 = x;
double r97323 = -3416824020916.5903;
bool r97324 = r97322 <= r97323;
double r97325 = 780.2110112890141;
bool r97326 = r97322 <= r97325;
double r97327 = !r97326;
bool r97328 = r97324 || r97327;
double r97329 = 1.0;
double r97330 = r97329 / r97322;
double r97331 = 1.0;
double r97332 = 5.0;
double r97333 = pow(r97322, r97332);
double r97334 = r97331 / r97333;
double r97335 = 3.0;
double r97336 = pow(r97322, r97335);
double r97337 = r97331 / r97336;
double r97338 = r97334 - r97337;
double r97339 = r97330 + r97338;
double r97340 = fma(r97322, r97322, r97331);
double r97341 = r97329 / r97340;
double r97342 = r97322 * r97341;
double r97343 = r97328 ? r97339 : r97342;
return r97343;
}




Bits error versus x
| Original | 15.5 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -3416824020916.5903 or 780.2110112890141 < x Initial program 31.5
rmApplied div-inv31.5
Simplified31.5
Taylor expanded around inf 0.0
Simplified0.0
if -3416824020916.5903 < x < 780.2110112890141Initial program 0.0
rmApplied div-inv0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019325 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))