\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -1.0108746280769982 \lor \neg \left(x \le 1.0073267373299459\right):\\
\;\;\;\;\left(\frac{1}{{x}^{5}} + \frac{1}{x}\right) - \frac{1}{{x}^{3}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\left(x + {x}^{5}\right) - {x}^{3}\right)\\
\end{array}double f(double x) {
double r57687 = x;
double r57688 = r57687 * r57687;
double r57689 = 1.0;
double r57690 = r57688 + r57689;
double r57691 = r57687 / r57690;
return r57691;
}
double f(double x) {
double r57692 = x;
double r57693 = -1.0108746280769982;
bool r57694 = r57692 <= r57693;
double r57695 = 1.007326737329946;
bool r57696 = r57692 <= r57695;
double r57697 = !r57696;
bool r57698 = r57694 || r57697;
double r57699 = 1.0;
double r57700 = 5.0;
double r57701 = pow(r57692, r57700);
double r57702 = r57699 / r57701;
double r57703 = 1.0;
double r57704 = r57703 / r57692;
double r57705 = r57702 + r57704;
double r57706 = 3.0;
double r57707 = pow(r57692, r57706);
double r57708 = r57699 / r57707;
double r57709 = r57705 - r57708;
double r57710 = r57692 + r57701;
double r57711 = r57710 - r57707;
double r57712 = r57699 * r57711;
double r57713 = r57698 ? r57709 : r57712;
return r57713;
}




Bits error versus x
Results
| Original | 14.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.2 |
if x < -1.0108746280769982 or 1.007326737329946 < x Initial program 29.3
Taylor expanded around inf 0.2
Simplified0.2
if -1.0108746280769982 < x < 1.007326737329946Initial program 0.0
Taylor expanded around 0 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020043
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))