\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 -33511.8397027548854:\\
\;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\
\mathbf{elif}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le 1.65436 \cdot 10^{-24}:\\
\;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{1}{x \cdot x} \cdot \frac{2}{x}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(1 \cdot x - \left(x + 1\right) \cdot 2, x - 1, \left(\left(x + 1\right) \cdot x\right) \cdot 1\right)}{\left(\left(x + 1\right) \cdot x\right) \cdot \left(x - 1\right)}\\
\end{array}double f(double x) {
double r71868 = 1.0;
double r71869 = x;
double r71870 = r71869 + r71868;
double r71871 = r71868 / r71870;
double r71872 = 2.0;
double r71873 = r71872 / r71869;
double r71874 = r71871 - r71873;
double r71875 = r71869 - r71868;
double r71876 = r71868 / r71875;
double r71877 = r71874 + r71876;
return r71877;
}
double f(double x) {
double r71878 = 1.0;
double r71879 = x;
double r71880 = r71879 + r71878;
double r71881 = r71878 / r71880;
double r71882 = 2.0;
double r71883 = r71882 / r71879;
double r71884 = r71881 - r71883;
double r71885 = r71879 - r71878;
double r71886 = r71878 / r71885;
double r71887 = r71884 + r71886;
double r71888 = -33511.839702754885;
bool r71889 = r71887 <= r71888;
double r71890 = 1.6543612251060553e-24;
bool r71891 = r71887 <= r71890;
double r71892 = 7.0;
double r71893 = pow(r71879, r71892);
double r71894 = r71882 / r71893;
double r71895 = 5.0;
double r71896 = pow(r71879, r71895);
double r71897 = r71882 / r71896;
double r71898 = 1.0;
double r71899 = r71879 * r71879;
double r71900 = r71898 / r71899;
double r71901 = r71900 * r71883;
double r71902 = r71897 + r71901;
double r71903 = r71894 + r71902;
double r71904 = r71878 * r71879;
double r71905 = r71880 * r71882;
double r71906 = r71904 - r71905;
double r71907 = r71880 * r71879;
double r71908 = r71907 * r71878;
double r71909 = fma(r71906, r71885, r71908);
double r71910 = r71907 * r71885;
double r71911 = r71909 / r71910;
double r71912 = r71891 ? r71903 : r71911;
double r71913 = r71889 ? r71887 : r71912;
return r71913;
}




Bits error versus x
| Original | 9.7 |
|---|---|
| Target | 0.3 |
| Herbie | 0.5 |
if (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < -33511.839702754885Initial program 0.0
if -33511.839702754885 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 1.6543612251060553e-24Initial program 19.4
Taylor expanded around inf 1.4
Simplified1.4
rmApplied add-cube-cbrt2.0
Applied unpow-prod-down2.0
Applied *-un-lft-identity2.0
Applied times-frac1.4
Simplified1.1
Simplified0.8
if 1.6543612251060553e-24 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) Initial program 0.5
rmApplied frac-sub0.5
Applied frac-add0.0
Simplified0.5
Final simplification0.5
herbie shell --seed 2020046 +o rules:numerics
(FPCore (x)
:name "3frac (problem 3.3.3)"
:precision binary64
:herbie-target
(/ 2 (* x (- (* x x) 1)))
(+ (- (/ 1 (+ x 1)) (/ 2 x)) (/ 1 (- x 1))))