\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -1.331636163847744521973196434576919413339 \cdot 10^{154} \lor \neg \left(x \le 249669183499528.375\right):\\
\;\;\;\;2 \cdot \left(\frac{1}{{x}^{7}} + \left(\frac{1}{{x}^{5}} + \frac{1}{{x}^{3}}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\left({x}^{2} \cdot \sqrt{1} + 1 \cdot \left(\frac{x}{\sqrt{1}} - \left(x \cdot \sqrt{1} + \frac{{x}^{2}}{\sqrt{1}}\right)\right)\right) + 2 \cdot \frac{1}{\sqrt{1}}}{x}}{\frac{x + 1}{\sqrt{1}}}}{x - 1}\\
\end{array}double f(double x) {
double r140724 = 1.0;
double r140725 = x;
double r140726 = r140725 + r140724;
double r140727 = r140724 / r140726;
double r140728 = 2.0;
double r140729 = r140728 / r140725;
double r140730 = r140727 - r140729;
double r140731 = r140725 - r140724;
double r140732 = r140724 / r140731;
double r140733 = r140730 + r140732;
return r140733;
}
double f(double x) {
double r140734 = x;
double r140735 = -1.3316361638477445e+154;
bool r140736 = r140734 <= r140735;
double r140737 = 249669183499528.38;
bool r140738 = r140734 <= r140737;
double r140739 = !r140738;
bool r140740 = r140736 || r140739;
double r140741 = 2.0;
double r140742 = 1.0;
double r140743 = 7.0;
double r140744 = pow(r140734, r140743);
double r140745 = r140742 / r140744;
double r140746 = 5.0;
double r140747 = pow(r140734, r140746);
double r140748 = r140742 / r140747;
double r140749 = 3.0;
double r140750 = pow(r140734, r140749);
double r140751 = r140742 / r140750;
double r140752 = r140748 + r140751;
double r140753 = r140745 + r140752;
double r140754 = r140741 * r140753;
double r140755 = 2.0;
double r140756 = pow(r140734, r140755);
double r140757 = 1.0;
double r140758 = sqrt(r140757);
double r140759 = r140756 * r140758;
double r140760 = r140734 / r140758;
double r140761 = r140734 * r140758;
double r140762 = r140756 / r140758;
double r140763 = r140761 + r140762;
double r140764 = r140760 - r140763;
double r140765 = r140757 * r140764;
double r140766 = r140759 + r140765;
double r140767 = r140742 / r140758;
double r140768 = r140741 * r140767;
double r140769 = r140766 + r140768;
double r140770 = r140769 / r140734;
double r140771 = r140734 + r140757;
double r140772 = r140771 / r140758;
double r140773 = r140770 / r140772;
double r140774 = r140734 - r140757;
double r140775 = r140773 / r140774;
double r140776 = r140740 ? r140754 : r140775;
return r140776;
}




Bits error versus x
Results
| Original | 9.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if x < -1.3316361638477445e+154 or 249669183499528.38 < x Initial program 12.3
Taylor expanded around inf 0.3
Simplified0.3
if -1.3316361638477445e+154 < x < 249669183499528.38Initial program 8.1
rmApplied add-sqr-sqrt8.1
Applied associate-/l*8.1
rmApplied frac-sub9.0
Applied frac-add7.6
Taylor expanded around 0 7.6
Simplified0.2
rmApplied associate-/r*0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019318
(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))))