\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -57137068010548903280640 \lor \neg \left(x \le 8124.998191315608892182353883981704711914\right):\\
\;\;\;\;\left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right) + \frac{1}{x}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(x, x, 1\right)}\\
\end{array}double f(double x) {
double r48111 = x;
double r48112 = r48111 * r48111;
double r48113 = 1.0;
double r48114 = r48112 + r48113;
double r48115 = r48111 / r48114;
return r48115;
}
double f(double x) {
double r48116 = x;
double r48117 = -5.71370680105489e+22;
bool r48118 = r48116 <= r48117;
double r48119 = 8124.998191315609;
bool r48120 = r48116 <= r48119;
double r48121 = !r48120;
bool r48122 = r48118 || r48121;
double r48123 = 1.0;
double r48124 = 5.0;
double r48125 = pow(r48116, r48124);
double r48126 = r48123 / r48125;
double r48127 = 3.0;
double r48128 = pow(r48116, r48127);
double r48129 = r48123 / r48128;
double r48130 = r48126 - r48129;
double r48131 = 1.0;
double r48132 = r48131 / r48116;
double r48133 = r48130 + r48132;
double r48134 = fma(r48116, r48116, r48123);
double r48135 = r48116 / r48134;
double r48136 = r48122 ? r48133 : r48135;
return r48136;
}




Bits error versus x
| Original | 14.8 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -5.71370680105489e+22 or 8124.998191315609 < x Initial program 30.6
Simplified30.6
Taylor expanded around inf 0.0
Simplified0.0
if -5.71370680105489e+22 < x < 8124.998191315609Initial program 0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:herbie-target
(/ 1.0 (+ x (/ 1.0 x)))
(/ x (+ (* x x) 1.0)))