\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -6092285729639.72168 \lor \neg \left(x \le 897.371029930506097\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 r95687 = x;
double r95688 = r95687 * r95687;
double r95689 = 1.0;
double r95690 = r95688 + r95689;
double r95691 = r95687 / r95690;
return r95691;
}
double f(double x) {
double r95692 = x;
double r95693 = -6092285729639.722;
bool r95694 = r95692 <= r95693;
double r95695 = 897.3710299305061;
bool r95696 = r95692 <= r95695;
double r95697 = !r95696;
bool r95698 = r95694 || r95697;
double r95699 = 1.0;
double r95700 = 5.0;
double r95701 = pow(r95692, r95700);
double r95702 = r95699 / r95701;
double r95703 = 1.0;
double r95704 = r95703 / r95692;
double r95705 = 3.0;
double r95706 = pow(r95692, r95705);
double r95707 = r95699 / r95706;
double r95708 = r95704 - r95707;
double r95709 = r95702 + r95708;
double r95710 = fma(r95692, r95692, r95699);
double r95711 = r95703 / r95710;
double r95712 = r95692 * r95711;
double r95713 = r95698 ? r95709 : r95712;
return r95713;
}




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