\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -1313.139082756415291441953741014003753662:\\
\;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{3}}\right) + \frac{2}{{x}^{7}}\\
\mathbf{elif}\;x \le 33013378.79688735306262969970703125:\\
\;\;\;\;\frac{1 \cdot \left(x \cdot \left(x + 1\right)\right) - \left(x - 1\right) \cdot \left(2 \cdot \left(x + 1\right) - x \cdot 1\right)}{\left(x - 1\right) \cdot \left(x \cdot \left(x + 1\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{\frac{2}{x \cdot x}}{x}\right) + \frac{2}{{x}^{7}}\\
\end{array}double f(double x) {
double r136790 = 1.0;
double r136791 = x;
double r136792 = r136791 + r136790;
double r136793 = r136790 / r136792;
double r136794 = 2.0;
double r136795 = r136794 / r136791;
double r136796 = r136793 - r136795;
double r136797 = r136791 - r136790;
double r136798 = r136790 / r136797;
double r136799 = r136796 + r136798;
return r136799;
}
double f(double x) {
double r136800 = x;
double r136801 = -1313.1390827564153;
bool r136802 = r136800 <= r136801;
double r136803 = 2.0;
double r136804 = 5.0;
double r136805 = pow(r136800, r136804);
double r136806 = r136803 / r136805;
double r136807 = 3.0;
double r136808 = pow(r136800, r136807);
double r136809 = r136803 / r136808;
double r136810 = r136806 + r136809;
double r136811 = 7.0;
double r136812 = pow(r136800, r136811);
double r136813 = r136803 / r136812;
double r136814 = r136810 + r136813;
double r136815 = 33013378.796887353;
bool r136816 = r136800 <= r136815;
double r136817 = 1.0;
double r136818 = r136800 + r136817;
double r136819 = r136800 * r136818;
double r136820 = r136817 * r136819;
double r136821 = r136800 - r136817;
double r136822 = r136803 * r136818;
double r136823 = r136800 * r136817;
double r136824 = r136822 - r136823;
double r136825 = r136821 * r136824;
double r136826 = r136820 - r136825;
double r136827 = r136821 * r136819;
double r136828 = r136826 / r136827;
double r136829 = r136800 * r136800;
double r136830 = r136803 / r136829;
double r136831 = r136830 / r136800;
double r136832 = r136806 + r136831;
double r136833 = r136832 + r136813;
double r136834 = r136816 ? r136828 : r136833;
double r136835 = r136802 ? r136814 : r136834;
return r136835;
}




Bits error versus x
Results
| Original | 9.7 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if x < -1313.1390827564153Initial program 20.1
Simplified20.1
Taylor expanded around inf 0.6
Simplified0.6
if -1313.1390827564153 < x < 33013378.796887353Initial program 0.4
Simplified0.4
rmApplied frac-sub0.4
Applied frac-sub0.0
if 33013378.796887353 < x Initial program 19.1
Simplified19.1
Taylor expanded around inf 0.5
Simplified0.5
rmApplied unpow30.6
Applied associate-/r*0.1
Final simplification0.2
herbie shell --seed 2019235 +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))))