\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -3042.621786307237471191911026835441589355:\\
\;\;\;\;\left(\frac{1}{{x}^{5}} - \frac{\frac{1}{x}}{x \cdot x}\right) + \frac{1}{x}\\
\mathbf{elif}\;x \le 1028948.43663111724890768527984619140625:\\
\;\;\;\;\frac{1}{\sqrt[3]{\mathsf{fma}\left(x, x, 1\right)} \cdot \sqrt[3]{\mathsf{fma}\left(x, x, 1\right)}} \cdot \frac{x}{\sqrt[3]{\mathsf{fma}\left(x, x, 1\right)}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{1}{{x}^{5}} - \frac{\frac{1}{x}}{x \cdot x}\right) + \frac{1}{x}\\
\end{array}double f(double x) {
double r3186233 = x;
double r3186234 = r3186233 * r3186233;
double r3186235 = 1.0;
double r3186236 = r3186234 + r3186235;
double r3186237 = r3186233 / r3186236;
return r3186237;
}
double f(double x) {
double r3186238 = x;
double r3186239 = -3042.6217863072375;
bool r3186240 = r3186238 <= r3186239;
double r3186241 = 1.0;
double r3186242 = 5.0;
double r3186243 = pow(r3186238, r3186242);
double r3186244 = r3186241 / r3186243;
double r3186245 = r3186241 / r3186238;
double r3186246 = r3186238 * r3186238;
double r3186247 = r3186245 / r3186246;
double r3186248 = r3186244 - r3186247;
double r3186249 = 1.0;
double r3186250 = r3186249 / r3186238;
double r3186251 = r3186248 + r3186250;
double r3186252 = 1028948.4366311172;
bool r3186253 = r3186238 <= r3186252;
double r3186254 = fma(r3186238, r3186238, r3186241);
double r3186255 = cbrt(r3186254);
double r3186256 = r3186255 * r3186255;
double r3186257 = r3186249 / r3186256;
double r3186258 = r3186238 / r3186255;
double r3186259 = r3186257 * r3186258;
double r3186260 = r3186253 ? r3186259 : r3186251;
double r3186261 = r3186240 ? r3186251 : r3186260;
return r3186261;
}




Bits error versus x
| Original | 15.3 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -3042.6217863072375 or 1028948.4366311172 < x Initial program 30.9
Simplified30.9
Taylor expanded around inf 0.0
Simplified0.0
if -3042.6217863072375 < x < 1028948.4366311172Initial program 0.0
Simplified0.0
rmApplied add-cube-cbrt0.0
Applied *-un-lft-identity0.0
Applied times-frac0.0
Final simplification0.0
herbie shell --seed 2019170 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:herbie-target
(/ 1.0 (+ x (/ 1.0 x)))
(/ x (+ (* x x) 1.0)))