\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -122.45163267022434:\\
\;\;\;\;\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{elif}\;x \le 131.817678773259985:\\
\;\;\;\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{2}{{x}^{3}}\right)\right)\\
\end{array}double f(double x) {
double r120768 = 1.0;
double r120769 = x;
double r120770 = r120769 + r120768;
double r120771 = r120768 / r120770;
double r120772 = 2.0;
double r120773 = r120772 / r120769;
double r120774 = r120771 - r120773;
double r120775 = r120769 - r120768;
double r120776 = r120768 / r120775;
double r120777 = r120774 + r120776;
return r120777;
}
double f(double x) {
double r120778 = x;
double r120779 = -122.45163267022434;
bool r120780 = r120778 <= r120779;
double r120781 = 2.0;
double r120782 = 1.0;
double r120783 = 7.0;
double r120784 = pow(r120778, r120783);
double r120785 = r120782 / r120784;
double r120786 = 5.0;
double r120787 = pow(r120778, r120786);
double r120788 = r120782 / r120787;
double r120789 = r120781 / r120778;
double r120790 = r120778 * r120778;
double r120791 = r120789 / r120790;
double r120792 = fma(r120781, r120788, r120791);
double r120793 = fma(r120781, r120785, r120792);
double r120794 = 131.81767877325998;
bool r120795 = r120778 <= r120794;
double r120796 = 1.0;
double r120797 = r120778 + r120796;
double r120798 = r120796 / r120797;
double r120799 = r120798 - r120789;
double r120800 = r120778 - r120796;
double r120801 = r120796 / r120800;
double r120802 = r120799 + r120801;
double r120803 = 3.0;
double r120804 = pow(r120778, r120803);
double r120805 = r120781 / r120804;
double r120806 = fma(r120781, r120788, r120805);
double r120807 = fma(r120781, r120785, r120806);
double r120808 = r120795 ? r120802 : r120807;
double r120809 = r120780 ? r120793 : r120808;
return r120809;
}




Bits error versus x
| Original | 10.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if x < -122.45163267022434Initial program 20.5
Taylor expanded around inf 0.7
Simplified0.7
rmApplied cube-mult0.7
Applied associate-/r*0.1
if -122.45163267022434 < x < 131.81767877325998Initial program 0.1
if 131.81767877325998 < x Initial program 20.4
Taylor expanded around inf 0.6
Simplified0.6
Final simplification0.2
herbie shell --seed 2020064 +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))))