\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;x \le -8789989068572990460 \lor \neg \left(x \le 14857.3789203431752\right):\\
\;\;\;\;1 \cdot \left(\frac{1}{{x}^{5}} - \frac{1}{{x}^{3}}\right) + \frac{1}{x}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{x \cdot x + 1}\\
\end{array}double f(double x) {
double r57044 = x;
double r57045 = r57044 * r57044;
double r57046 = 1.0;
double r57047 = r57045 + r57046;
double r57048 = r57044 / r57047;
return r57048;
}
double f(double x) {
double r57049 = x;
double r57050 = -8.78998906857299e+18;
bool r57051 = r57049 <= r57050;
double r57052 = 14857.378920343175;
bool r57053 = r57049 <= r57052;
double r57054 = !r57053;
bool r57055 = r57051 || r57054;
double r57056 = 1.0;
double r57057 = 1.0;
double r57058 = 5.0;
double r57059 = pow(r57049, r57058);
double r57060 = r57057 / r57059;
double r57061 = 3.0;
double r57062 = pow(r57049, r57061);
double r57063 = r57057 / r57062;
double r57064 = r57060 - r57063;
double r57065 = r57056 * r57064;
double r57066 = r57057 / r57049;
double r57067 = r57065 + r57066;
double r57068 = r57049 * r57049;
double r57069 = r57068 + r57056;
double r57070 = r57049 / r57069;
double r57071 = r57055 ? r57067 : r57070;
return r57071;
}




Bits error versus x
Results
| Original | 15.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.0 |
if x < -8.78998906857299e+18 or 14857.378920343175 < x Initial program 31.4
Taylor expanded around inf 0.0
Simplified0.0
if -8.78998906857299e+18 < x < 14857.378920343175Initial program 0.0
Final simplification0.0
herbie shell --seed 2020036
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1 (+ x (/ 1 x)))
(/ x (+ (* x x) 1)))