\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -113.0445804934405913400041754357516765594 \lor \neg \left(x \le 113.4156346060324409563691006042063236237\right):\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, 2 \cdot {x}^{\left(-3\right)}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{\sqrt[3]{1}}{\mathsf{fma}\left(1, 1 - x, {x}^{2}\right)} \cdot \sqrt[3]{1}\right) \cdot \frac{\sqrt[3]{1}}{x + 1}, x \cdot x + \left(1 \cdot 1 - x \cdot 1\right), -\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 r121565 = 1.0;
double r121566 = x;
double r121567 = r121566 + r121565;
double r121568 = r121565 / r121567;
double r121569 = 2.0;
double r121570 = r121569 / r121566;
double r121571 = r121568 - r121570;
double r121572 = r121566 - r121565;
double r121573 = r121565 / r121572;
double r121574 = r121571 + r121573;
return r121574;
}
double f(double x) {
double r121575 = x;
double r121576 = -113.04458049344059;
bool r121577 = r121575 <= r121576;
double r121578 = 113.41563460603244;
bool r121579 = r121575 <= r121578;
double r121580 = !r121579;
bool r121581 = r121577 || r121580;
double r121582 = 2.0;
double r121583 = 1.0;
double r121584 = 7.0;
double r121585 = pow(r121575, r121584);
double r121586 = r121583 / r121585;
double r121587 = 5.0;
double r121588 = pow(r121575, r121587);
double r121589 = r121583 / r121588;
double r121590 = 3.0;
double r121591 = -r121590;
double r121592 = pow(r121575, r121591);
double r121593 = r121582 * r121592;
double r121594 = fma(r121582, r121589, r121593);
double r121595 = fma(r121582, r121586, r121594);
double r121596 = 1.0;
double r121597 = cbrt(r121596);
double r121598 = r121596 - r121575;
double r121599 = 2.0;
double r121600 = pow(r121575, r121599);
double r121601 = fma(r121596, r121598, r121600);
double r121602 = r121597 / r121601;
double r121603 = r121602 * r121597;
double r121604 = r121575 + r121596;
double r121605 = r121597 / r121604;
double r121606 = r121603 * r121605;
double r121607 = r121575 * r121575;
double r121608 = r121596 * r121596;
double r121609 = r121575 * r121596;
double r121610 = r121608 - r121609;
double r121611 = r121607 + r121610;
double r121612 = r121582 / r121575;
double r121613 = r121612 * r121583;
double r121614 = -r121613;
double r121615 = fma(r121606, r121611, r121614);
double r121616 = -r121583;
double r121617 = r121616 + r121583;
double r121618 = r121575 - r121596;
double r121619 = r121596 / r121618;
double r121620 = fma(r121612, r121617, r121619);
double r121621 = r121615 + r121620;
double r121622 = r121581 ? r121595 : r121621;
return r121622;
}




Bits error versus x
| Original | 9.6 |
|---|---|
| Target | 0.3 |
| Herbie | 0.0 |
if x < -113.04458049344059 or 113.41563460603244 < x Initial program 19.2
rmApplied *-un-lft-identity19.2
Applied flip3-+61.8
Applied associate-/r/61.9
Applied prod-diff61.9
Applied associate-+l+61.9
Simplified61.9
Taylor expanded around inf 0.5
Simplified0.5
rmApplied pow-flip0.0
if -113.04458049344059 < x < 113.41563460603244Initial 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 sum-cubes0.0
Applied add-cube-cbrt0.0
Applied times-frac0.0
Simplified0.0
Final simplification0.0
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))))