\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{1}{1 \cdot \left(\sqrt{\sqrt{x} + \sqrt{x + 1}} \cdot \sqrt{\sqrt{x} + \sqrt{x + 1}}\right)}}{\sqrt{x} \cdot \sqrt{x + 1}}double f(double x) {
double r159736 = 1.0;
double r159737 = x;
double r159738 = sqrt(r159737);
double r159739 = r159736 / r159738;
double r159740 = r159737 + r159736;
double r159741 = sqrt(r159740);
double r159742 = r159736 / r159741;
double r159743 = r159739 - r159742;
return r159743;
}
double f(double x) {
double r159744 = 1.0;
double r159745 = x;
double r159746 = sqrt(r159745);
double r159747 = r159745 + r159744;
double r159748 = sqrt(r159747);
double r159749 = r159746 + r159748;
double r159750 = sqrt(r159749);
double r159751 = r159750 * r159750;
double r159752 = r159744 * r159751;
double r159753 = r159744 / r159752;
double r159754 = r159746 * r159748;
double r159755 = r159753 / r159754;
return r159755;
}




Bits error versus x
Results
| Original | 19.7 |
|---|---|
| Target | 0.7 |
| Herbie | 0.4 |
Initial program 19.7
rmApplied frac-sub19.7
rmApplied flip--19.5
Simplified19.0
Simplified19.0
Taylor expanded around 0 0.4
rmApplied add-sqr-sqrt0.4
Final simplification0.4
herbie shell --seed 2019235 +o rules:numerics
(FPCore (x)
:name "2isqrt (example 3.6)"
:precision binary64
:herbie-target
(/ 1 (+ (* (+ x 1) (sqrt x)) (* x (sqrt (+ x 1)))))
(- (/ 1 (sqrt x)) (/ 1 (sqrt (+ x 1)))))