\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 -0.3774919857991819172049474673258373513818:\\
\;\;\;\;\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 7.340753439138980596112560306210070848465 \cdot 10^{-15}:\\
\;\;\;\;2 \cdot \left(\frac{1}{{x}^{7}} + \left(\frac{1}{{x}^{5}} + {x}^{\left(-3\right)}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(1 - \left(1 \cdot x + 2 \cdot \frac{1}{x}\right)\right) + \frac{1}{x - 1}\\
\end{array}double f(double x) {
double r94713 = 1.0;
double r94714 = x;
double r94715 = r94714 + r94713;
double r94716 = r94713 / r94715;
double r94717 = 2.0;
double r94718 = r94717 / r94714;
double r94719 = r94716 - r94718;
double r94720 = r94714 - r94713;
double r94721 = r94713 / r94720;
double r94722 = r94719 + r94721;
return r94722;
}
double f(double x) {
double r94723 = 1.0;
double r94724 = x;
double r94725 = r94724 + r94723;
double r94726 = r94723 / r94725;
double r94727 = 2.0;
double r94728 = r94727 / r94724;
double r94729 = r94726 - r94728;
double r94730 = r94724 - r94723;
double r94731 = r94723 / r94730;
double r94732 = r94729 + r94731;
double r94733 = -0.3774919857991819;
bool r94734 = r94732 <= r94733;
double r94735 = 7.34075343913898e-15;
bool r94736 = r94732 <= r94735;
double r94737 = 1.0;
double r94738 = 7.0;
double r94739 = pow(r94724, r94738);
double r94740 = r94737 / r94739;
double r94741 = 5.0;
double r94742 = pow(r94724, r94741);
double r94743 = r94737 / r94742;
double r94744 = 3.0;
double r94745 = -r94744;
double r94746 = pow(r94724, r94745);
double r94747 = r94743 + r94746;
double r94748 = r94740 + r94747;
double r94749 = r94727 * r94748;
double r94750 = r94723 * r94724;
double r94751 = r94737 / r94724;
double r94752 = r94727 * r94751;
double r94753 = r94750 + r94752;
double r94754 = r94723 - r94753;
double r94755 = r94754 + r94731;
double r94756 = r94736 ? r94749 : r94755;
double r94757 = r94734 ? r94732 : r94756;
return r94757;
}




Bits error versus x
Results
| Original | 10.2 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
if (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < -0.3774919857991819Initial program 0.0
if -0.3774919857991819 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 7.34075343913898e-15Initial program 20.2
Taylor expanded around inf 0.6
Simplified0.6
rmApplied pow-flip0.1
if 7.34075343913898e-15 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) Initial program 0.3
Taylor expanded around 0 1.5
Final simplification0.4
herbie shell --seed 2019298
(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))))