\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -2101569.4261024096:\\
\;\;\;\;\mathsf{fma}\left(\frac{-1}{x \cdot x}, \frac{1}{x}, \frac{1}{x}\right) + \frac{1}{{x}^{5}}\\
\mathbf{elif}\;x \le 471.29821069866506:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(x, x, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{-1}{x \cdot x}, \frac{1}{x}, \frac{1}{x}\right) + \frac{1}{{x}^{5}}\\
\end{array}double f(double x) {
double r2271784 = x;
double r2271785 = r2271784 * r2271784;
double r2271786 = 1.0;
double r2271787 = r2271785 + r2271786;
double r2271788 = r2271784 / r2271787;
return r2271788;
}
double f(double x) {
double r2271789 = x;
double r2271790 = -2101569.4261024096;
bool r2271791 = r2271789 <= r2271790;
double r2271792 = -1.0;
double r2271793 = r2271789 * r2271789;
double r2271794 = r2271792 / r2271793;
double r2271795 = 1.0;
double r2271796 = r2271795 / r2271789;
double r2271797 = fma(r2271794, r2271796, r2271796);
double r2271798 = 5.0;
double r2271799 = pow(r2271789, r2271798);
double r2271800 = r2271795 / r2271799;
double r2271801 = r2271797 + r2271800;
double r2271802 = 471.29821069866506;
bool r2271803 = r2271789 <= r2271802;
double r2271804 = fma(r2271789, r2271789, r2271795);
double r2271805 = r2271789 / r2271804;
double r2271806 = r2271803 ? r2271805 : r2271801;
double r2271807 = r2271791 ? r2271801 : r2271806;
return r2271807;
}




Bits error versus x
| Original | 15.4 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -2101569.4261024096 or 471.29821069866506 < x Initial program 30.9
Simplified30.9
Taylor expanded around inf 0.0
Simplified0.0
if -2101569.4261024096 < x < 471.29821069866506Initial program 0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))