\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\sqrt{\frac{1}{\sqrt{x + 1} + \sqrt{x}}}}{\sqrt{x}} \cdot \frac{\sqrt{\frac{1}{\sqrt{x + 1} + \sqrt{x}}}}{\sqrt{x + 1}}double f(double x) {
double r108854 = 1.0;
double r108855 = x;
double r108856 = sqrt(r108855);
double r108857 = r108854 / r108856;
double r108858 = r108855 + r108854;
double r108859 = sqrt(r108858);
double r108860 = r108854 / r108859;
double r108861 = r108857 - r108860;
return r108861;
}
double f(double x) {
double r108862 = 1.0;
double r108863 = x;
double r108864 = 1.0;
double r108865 = r108863 + r108864;
double r108866 = sqrt(r108865);
double r108867 = sqrt(r108863);
double r108868 = r108866 + r108867;
double r108869 = r108862 / r108868;
double r108870 = sqrt(r108869);
double r108871 = r108870 / r108867;
double r108872 = r108870 / r108866;
double r108873 = r108871 * r108872;
return r108873;
}




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