\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -0.9941877870754349810766825612518005073071:\\
\;\;\;\;\left(\frac{\sqrt{\frac{\frac{2}{x}}{x}}}{x} \cdot \sqrt{\frac{2}{x \cdot x}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\\
\mathbf{elif}\;x \le 1.023269548601458467373959138058125972748:\\
\;\;\;\;-2 \cdot \left({x}^{3} + \left(\frac{1}{x} + x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{2}{{x}^{3}} + \frac{2}{{x}^{5}}\right) - \frac{2.220446049250313080847263336181640625 \cdot 10^{-16}}{{x}^{6}}\\
\end{array}double f(double x) {
double r107611 = 1.0;
double r107612 = x;
double r107613 = r107612 + r107611;
double r107614 = r107611 / r107613;
double r107615 = 2.0;
double r107616 = r107615 / r107612;
double r107617 = r107614 - r107616;
double r107618 = r107612 - r107611;
double r107619 = r107611 / r107618;
double r107620 = r107617 + r107619;
return r107620;
}
double f(double x) {
double r107621 = x;
double r107622 = -0.994187787075435;
bool r107623 = r107621 <= r107622;
double r107624 = 2.0;
double r107625 = r107624 / r107621;
double r107626 = r107625 / r107621;
double r107627 = sqrt(r107626);
double r107628 = r107627 / r107621;
double r107629 = r107621 * r107621;
double r107630 = r107624 / r107629;
double r107631 = sqrt(r107630);
double r107632 = r107628 * r107631;
double r107633 = 5.0;
double r107634 = pow(r107621, r107633);
double r107635 = r107624 / r107634;
double r107636 = r107632 + r107635;
double r107637 = 2.220446049250313e-16;
double r107638 = 6.0;
double r107639 = pow(r107621, r107638);
double r107640 = r107637 / r107639;
double r107641 = r107636 - r107640;
double r107642 = 1.0232695486014585;
bool r107643 = r107621 <= r107642;
double r107644 = 3.0;
double r107645 = pow(r107621, r107644);
double r107646 = 1.0;
double r107647 = r107646 / r107621;
double r107648 = r107647 + r107621;
double r107649 = r107645 + r107648;
double r107650 = r107624 * r107649;
double r107651 = -r107650;
double r107652 = r107624 / r107645;
double r107653 = r107652 + r107635;
double r107654 = r107653 - r107640;
double r107655 = r107643 ? r107651 : r107654;
double r107656 = r107623 ? r107641 : r107655;
return r107656;
}




Bits error versus x
Results
| Original | 9.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.5 |
if x < -0.994187787075435Initial program 19.3
Simplified19.3
rmApplied log1p-expm1-u19.3
Taylor expanded around inf 0.8
Simplified0.8
rmApplied cube-mult0.9
Applied *-un-lft-identity0.9
Applied times-frac0.5
rmApplied add-sqr-sqrt0.6
Applied associate-*r*0.6
Simplified0.6
if -0.994187787075435 < x < 1.0232695486014585Initial program 0.0
Simplified0.0
rmApplied log1p-expm1-u0.0
Taylor expanded around 0 0.3
Simplified0.3
if 1.0232695486014585 < x Initial program 19.0
Simplified19.0
rmApplied log1p-expm1-u19.0
Taylor expanded around inf 0.6
Simplified0.6
Final simplification0.5
herbie shell --seed 2019212 +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))))