\frac{x}{x \cdot x + 1}\begin{array}{l}
\mathbf{if}\;\frac{x}{x \cdot x + 1} \leq -1.8310533803042086 \cdot 10^{-298} \lor \neg \left(\frac{x}{x \cdot x + 1} \leq -0\right):\\
\;\;\;\;\frac{\frac{x}{\sqrt{x \cdot x + 1}}}{\sqrt{x \cdot x + 1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{{x}^{5}} + \left(\frac{1}{x} - \frac{1}{{x}^{3}}\right)\\
\end{array}(FPCore (x) :precision binary64 (/ x (+ (* x x) 1.0)))
(FPCore (x)
:precision binary64
(if (or (<= (/ x (+ (* x x) 1.0)) -1.8310533803042086e-298)
(not (<= (/ x (+ (* x x) 1.0)) -0.0)))
(/ (/ x (sqrt (+ (* x x) 1.0))) (sqrt (+ (* x x) 1.0)))
(+ (/ 1.0 (pow x 5.0)) (- (/ 1.0 x) (/ 1.0 (pow x 3.0))))))double code(double x) {
return (x / ((double) (((double) (x * x)) + 1.0)));
}
double code(double x) {
double tmp;
if ((((x / ((double) (((double) (x * x)) + 1.0))) <= -1.8310533803042086e-298) || !((x / ((double) (((double) (x * x)) + 1.0))) <= -0.0))) {
tmp = ((x / ((double) sqrt(((double) (((double) (x * x)) + 1.0))))) / ((double) sqrt(((double) (((double) (x * x)) + 1.0)))));
} else {
tmp = ((double) ((1.0 / ((double) pow(x, 5.0))) + ((double) ((1.0 / x) - (1.0 / ((double) pow(x, 3.0)))))));
}
return tmp;
}




Bits error versus x
Results
| Original | 15.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.5 |
if (/ x (+ (* x x) 1.0)) < -1.83105338030420862e-298 or -0.0 < (/ x (+ (* x x) 1.0)) Initial program Error: 0.1 bits
rmApplied add-sqr-sqrtError: 0.1 bits
Applied associate-/r*Error: 0.0 bits
if -1.83105338030420862e-298 < (/ x (+ (* x x) 1.0)) < -0.0Initial program Error: 57.8 bits
Taylor expanded around inf Error: 1.9 bits
SimplifiedError: 1.9 bits
Final simplificationError: 0.5 bits
herbie shell --seed 2020203
(FPCore (x)
:name "x / (x^2 + 1)"
:precision binary64
:herbie-target
(/ 1.0 (+ x (/ 1.0 x)))
(/ x (+ (* x x) 1.0)))