\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}:\\
\;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{1}{x \cdot x} \cdot \frac{2}{x}\right) + \frac{2}{{x}^{7}}\\
\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 r101712 = 1.0;
double r101713 = x;
double r101714 = r101713 + r101712;
double r101715 = r101712 / r101714;
double r101716 = 2.0;
double r101717 = r101716 / r101713;
double r101718 = r101715 - r101717;
double r101719 = r101713 - r101712;
double r101720 = r101712 / r101719;
double r101721 = r101718 + r101720;
return r101721;
}
double f(double x) {
double r101722 = 1.0;
double r101723 = x;
double r101724 = r101723 + r101722;
double r101725 = r101722 / r101724;
double r101726 = 2.0;
double r101727 = r101726 / r101723;
double r101728 = r101725 - r101727;
double r101729 = r101723 - r101722;
double r101730 = r101722 / r101729;
double r101731 = r101728 + r101730;
double r101732 = -33511.839702754885;
bool r101733 = r101731 <= r101732;
double r101734 = 1.6543612251060553e-24;
bool r101735 = r101731 <= r101734;
double r101736 = 5.0;
double r101737 = pow(r101723, r101736);
double r101738 = r101726 / r101737;
double r101739 = 1.0;
double r101740 = r101723 * r101723;
double r101741 = r101739 / r101740;
double r101742 = r101741 * r101727;
double r101743 = r101738 + r101742;
double r101744 = 7.0;
double r101745 = pow(r101723, r101744);
double r101746 = r101726 / r101745;
double r101747 = r101743 + r101746;
double r101748 = r101722 * r101723;
double r101749 = r101724 * r101726;
double r101750 = r101748 - r101749;
double r101751 = r101724 * r101723;
double r101752 = r101751 * r101722;
double r101753 = fma(r101750, r101729, r101752);
double r101754 = r101751 * r101729;
double r101755 = r101753 / r101754;
double r101756 = r101735 ? r101747 : r101755;
double r101757 = r101733 ? r101731 : r101756;
return r101757;
}




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
rmApplied frac-sub51.9
Applied frac-add51.5
Simplified52.0
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))))