\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -62379821099783.2109 \lor \neg \left(x \le 2168.52278018713832\right):\\
\;\;\;\;\left(\frac{1}{x} + \frac{1}{{x}^{5}}\right) - \frac{1}{{x}^{3}}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{1}{\mathsf{fma}\left(x, x, 1\right)}\\
\end{array}double f(double x) {
double r110138 = x;
double r110139 = r110138 * r110138;
double r110140 = 1.0;
double r110141 = r110139 + r110140;
double r110142 = r110138 / r110141;
return r110142;
}
double f(double x) {
double r110143 = x;
double r110144 = -62379821099783.21;
bool r110145 = r110143 <= r110144;
double r110146 = 2168.5227801871383;
bool r110147 = r110143 <= r110146;
double r110148 = !r110147;
bool r110149 = r110145 || r110148;
double r110150 = 1.0;
double r110151 = r110150 / r110143;
double r110152 = 1.0;
double r110153 = 5.0;
double r110154 = pow(r110143, r110153);
double r110155 = r110152 / r110154;
double r110156 = r110151 + r110155;
double r110157 = 3.0;
double r110158 = pow(r110143, r110157);
double r110159 = r110152 / r110158;
double r110160 = r110156 - r110159;
double r110161 = fma(r110143, r110143, r110152);
double r110162 = r110150 / r110161;
double r110163 = r110143 * r110162;
double r110164 = r110149 ? r110160 : r110163;
return r110164;
}




Bits error versus x
| Original | 15.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -62379821099783.21 or 2168.5227801871383 < x Initial program 30.9
Taylor expanded around inf 0.0
Simplified0.0
if -62379821099783.21 < x < 2168.5227801871383Initial program 0.0
rmApplied div-inv0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2020047 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))