\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -340871036306084751321343440453632 \lor \neg \left(x \le 194132570.4950101375579833984375\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 r84708 = x;
double r84709 = r84708 * r84708;
double r84710 = 1.0;
double r84711 = r84709 + r84710;
double r84712 = r84708 / r84711;
return r84712;
}
double f(double x) {
double r84713 = x;
double r84714 = -3.4087103630608475e+32;
bool r84715 = r84713 <= r84714;
double r84716 = 194132570.49501014;
bool r84717 = r84713 <= r84716;
double r84718 = !r84717;
bool r84719 = r84715 || r84718;
double r84720 = 1.0;
double r84721 = r84720 / r84713;
double r84722 = 1.0;
double r84723 = 3.0;
double r84724 = pow(r84713, r84723);
double r84725 = r84722 / r84724;
double r84726 = r84721 - r84725;
double r84727 = 5.0;
double r84728 = pow(r84713, r84727);
double r84729 = r84722 / r84728;
double r84730 = r84726 + r84729;
double r84731 = fma(r84713, r84713, r84722);
double r84732 = r84713 / r84731;
double r84733 = r84719 ? r84730 : r84732;
return r84733;
}




Bits error versus x
| Original | 14.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -3.4087103630608475e+32 or 194132570.49501014 < x Initial program 31.7
Simplified31.7
Taylor expanded around inf 0.0
Simplified0.0
if -3.4087103630608475e+32 < x < 194132570.49501014Initial program 0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019322 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))