\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -90716742906700070912 \lor \neg \left(x \le 8839590.60347673483192920684814453125\right):\\
\;\;\;\;\frac{1}{{x}^{5}} + \left(\frac{1}{x} - \frac{1}{{x}^{3}}\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{1}{\mathsf{fma}\left(x, x, 1\right)}\\
\end{array}double f(double x) {
double r44105 = x;
double r44106 = r44105 * r44105;
double r44107 = 1.0;
double r44108 = r44106 + r44107;
double r44109 = r44105 / r44108;
return r44109;
}
double f(double x) {
double r44110 = x;
double r44111 = -9.071674290670007e+19;
bool r44112 = r44110 <= r44111;
double r44113 = 8839590.603476735;
bool r44114 = r44110 <= r44113;
double r44115 = !r44114;
bool r44116 = r44112 || r44115;
double r44117 = 1.0;
double r44118 = 5.0;
double r44119 = pow(r44110, r44118);
double r44120 = r44117 / r44119;
double r44121 = 1.0;
double r44122 = r44121 / r44110;
double r44123 = 3.0;
double r44124 = pow(r44110, r44123);
double r44125 = r44117 / r44124;
double r44126 = r44122 - r44125;
double r44127 = r44120 + r44126;
double r44128 = fma(r44110, r44110, r44117);
double r44129 = r44121 / r44128;
double r44130 = r44110 * r44129;
double r44131 = r44116 ? r44127 : r44130;
return r44131;
}




Bits error versus x
| Original | 14.8 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -9.071674290670007e+19 or 8839590.603476735 < x Initial program 31.2
Simplified31.2
rmApplied add-sqr-sqrt31.3
Applied *-un-lft-identity31.3
Applied times-frac31.1
Taylor expanded around inf 0.0
Simplified0.0
if -9.071674290670007e+19 < x < 8839590.603476735Initial program 0.0
Simplified0.0
rmApplied div-inv0.0
Final simplification0.0
herbie shell --seed 2019235 +o rules:numerics
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))