\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -503.944307784687680396018549799919128418 \lor \neg \left(x \le 446.6796391904089205127093009650707244873\right):\\
\;\;\;\;\frac{1}{x} + \left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{\sqrt{x \cdot x + 1}}}{\sqrt{x \cdot x + 1}}\\
\end{array}double f(double x) {
double r54249 = x;
double r54250 = r54249 * r54249;
double r54251 = 1.0;
double r54252 = r54250 + r54251;
double r54253 = r54249 / r54252;
return r54253;
}
double f(double x) {
double r54254 = x;
double r54255 = -503.9443077846877;
bool r54256 = r54254 <= r54255;
double r54257 = 446.6796391904089;
bool r54258 = r54254 <= r54257;
double r54259 = !r54258;
bool r54260 = r54256 || r54259;
double r54261 = 1.0;
double r54262 = r54261 / r54254;
double r54263 = 1.0;
double r54264 = 5.0;
double r54265 = pow(r54254, r54264);
double r54266 = r54263 / r54265;
double r54267 = 3.0;
double r54268 = pow(r54254, r54267);
double r54269 = r54263 / r54268;
double r54270 = r54266 - r54269;
double r54271 = r54262 + r54270;
double r54272 = r54254 * r54254;
double r54273 = r54272 + r54263;
double r54274 = sqrt(r54273);
double r54275 = r54254 / r54274;
double r54276 = r54275 / r54274;
double r54277 = r54260 ? r54271 : r54276;
return r54277;
}




Bits error versus x
Results
| Original | 14.6 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -503.9443077846877 or 446.6796391904089 < x Initial program 29.5
Taylor expanded around inf 0.0
Simplified0.0
if -503.9443077846877 < x < 446.6796391904089Initial program 0.0
rmApplied add-sqr-sqrt0.0
Applied associate-/r*0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019194
(FPCore (x)
:name "x / (x^2 + 1)"
:herbie-target
(/ 1.0 (+ x (/ 1.0 x)))
(/ x (+ (* x x) 1.0)))