\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{1 \cdot 1}{\sqrt{x} \cdot \left(x + 1\right) + \sqrt{\sqrt{x + 1}} \cdot \left(\sqrt{\sqrt{x + 1}} \cdot x\right)}double f(double x) {
double r96001 = 1.0;
double r96002 = x;
double r96003 = sqrt(r96002);
double r96004 = r96001 / r96003;
double r96005 = r96002 + r96001;
double r96006 = sqrt(r96005);
double r96007 = r96001 / r96006;
double r96008 = r96004 - r96007;
return r96008;
}
double f(double x) {
double r96009 = 1.0;
double r96010 = r96009 * r96009;
double r96011 = x;
double r96012 = sqrt(r96011);
double r96013 = r96011 + r96009;
double r96014 = r96012 * r96013;
double r96015 = sqrt(r96013);
double r96016 = sqrt(r96015);
double r96017 = r96016 * r96011;
double r96018 = r96016 * r96017;
double r96019 = r96014 + r96018;
double r96020 = r96010 / r96019;
return r96020;
}




Bits error versus x
Results
| Original | 19.6 |
|---|---|
| Target | 0.7 |
| Herbie | 0.7 |
Initial program 19.6
rmApplied frac-sub19.6
Simplified19.6
rmApplied flip--19.4
Applied associate-*r/19.4
Applied associate-/l/19.4
Simplified19.4
Taylor expanded around 0 0.7
rmApplied add-sqr-sqrt0.7
Applied sqrt-prod0.7
Applied associate-*l*0.7
Final simplification0.7
herbie shell --seed 2020046
(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)))))