\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le -2.48635192710706 \cdot 10^{-5} \lor \neg \left(\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le 7.80858 \cdot 10^{-22}\right):\\
\;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{2}{{x}^{7}} + \frac{\frac{2}{x \cdot x}}{x}\right) + \frac{2}{{x}^{5}}\\
\end{array}double f(double x) {
double r112747 = 1.0;
double r112748 = x;
double r112749 = r112748 + r112747;
double r112750 = r112747 / r112749;
double r112751 = 2.0;
double r112752 = r112751 / r112748;
double r112753 = r112750 - r112752;
double r112754 = r112748 - r112747;
double r112755 = r112747 / r112754;
double r112756 = r112753 + r112755;
return r112756;
}
double f(double x) {
double r112757 = 1.0;
double r112758 = x;
double r112759 = r112758 + r112757;
double r112760 = r112757 / r112759;
double r112761 = 2.0;
double r112762 = r112761 / r112758;
double r112763 = r112760 - r112762;
double r112764 = r112758 - r112757;
double r112765 = r112757 / r112764;
double r112766 = r112763 + r112765;
double r112767 = -2.4863519271070555e-05;
bool r112768 = r112766 <= r112767;
double r112769 = 7.808584982500581e-22;
bool r112770 = r112766 <= r112769;
double r112771 = !r112770;
bool r112772 = r112768 || r112771;
double r112773 = 7.0;
double r112774 = pow(r112758, r112773);
double r112775 = r112761 / r112774;
double r112776 = r112758 * r112758;
double r112777 = r112761 / r112776;
double r112778 = r112777 / r112758;
double r112779 = r112775 + r112778;
double r112780 = 5.0;
double r112781 = pow(r112758, r112780);
double r112782 = r112761 / r112781;
double r112783 = r112779 + r112782;
double r112784 = r112772 ? r112766 : r112783;
return r112784;
}




Bits error versus x
Results
| Original | 10.0 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < -2.4863519271070555e-05 or 7.808584982500581e-22 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) Initial program 0.2
if -2.4863519271070555e-05 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 7.808584982500581e-22Initial program 20.1
Taylor expanded around inf 0.6
Simplified0.6
rmApplied unpow30.6
Applied associate-/r*0.1
Final simplification0.2
herbie shell --seed 2019198 +o rules:numerics
(FPCore (x)
:name "3frac (problem 3.3.3)"
:herbie-target
(/ 2.0 (* x (- (* x x) 1.0)))
(+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))))