\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -98.6240485560662136776954866945743560791 \lor \neg \left(x \le 98.71861940061606333074450958520174026489\right):\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{\frac{2}{x}}{x \cdot x}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{{x}^{3} + {1}^{3}}, \sqrt[3]{{\left(\mathsf{fma}\left(1, 1 - x, {x}^{2}\right)\right)}^{3}}, -\frac{2}{x} \cdot 1\right) + \mathsf{fma}\left(\frac{2}{x}, \left(-1\right) + 1, \frac{1}{x - 1}\right)\\
\end{array}double f(double x) {
double r102746 = 1.0;
double r102747 = x;
double r102748 = r102747 + r102746;
double r102749 = r102746 / r102748;
double r102750 = 2.0;
double r102751 = r102750 / r102747;
double r102752 = r102749 - r102751;
double r102753 = r102747 - r102746;
double r102754 = r102746 / r102753;
double r102755 = r102752 + r102754;
return r102755;
}
double f(double x) {
double r102756 = x;
double r102757 = -98.62404855606621;
bool r102758 = r102756 <= r102757;
double r102759 = 98.71861940061606;
bool r102760 = r102756 <= r102759;
double r102761 = !r102760;
bool r102762 = r102758 || r102761;
double r102763 = 2.0;
double r102764 = 1.0;
double r102765 = 7.0;
double r102766 = pow(r102756, r102765);
double r102767 = r102764 / r102766;
double r102768 = 5.0;
double r102769 = pow(r102756, r102768);
double r102770 = r102764 / r102769;
double r102771 = r102763 / r102756;
double r102772 = r102756 * r102756;
double r102773 = r102771 / r102772;
double r102774 = fma(r102763, r102770, r102773);
double r102775 = fma(r102763, r102767, r102774);
double r102776 = 1.0;
double r102777 = 3.0;
double r102778 = pow(r102756, r102777);
double r102779 = pow(r102776, r102777);
double r102780 = r102778 + r102779;
double r102781 = r102776 / r102780;
double r102782 = r102776 - r102756;
double r102783 = 2.0;
double r102784 = pow(r102756, r102783);
double r102785 = fma(r102776, r102782, r102784);
double r102786 = pow(r102785, r102777);
double r102787 = cbrt(r102786);
double r102788 = r102771 * r102764;
double r102789 = -r102788;
double r102790 = fma(r102781, r102787, r102789);
double r102791 = -r102764;
double r102792 = r102791 + r102764;
double r102793 = r102756 - r102776;
double r102794 = r102776 / r102793;
double r102795 = fma(r102771, r102792, r102794);
double r102796 = r102790 + r102795;
double r102797 = r102762 ? r102775 : r102796;
return r102797;
}




Bits error versus x
| Original | 9.6 |
|---|---|
| Target | 0.3 |
| Herbie | 0.1 |
if x < -98.62404855606621 or 98.71861940061606 < x Initial program 19.2
Taylor expanded around inf 0.5
Simplified0.5
rmApplied cube-mult0.5
Applied associate-/r*0.1
if -98.62404855606621 < x < 98.71861940061606Initial program 0.0
rmApplied *-un-lft-identity0.0
Applied flip3-+0.0
Applied associate-/r/0.0
Applied prod-diff0.0
Applied associate-+l+0.0
Simplified0.0
rmApplied add-cbrt-cube0.0
Simplified0.0
Final simplification0.1
herbie shell --seed 2020001 +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))))