\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{\sqrt{1}}{1}}{\sqrt{x}} \cdot \frac{\sqrt{1}}{\mathsf{fma}\left(\sqrt{x + 1}, \sqrt{x}, x + 1\right)}double f(double x) {
double r101953 = 1.0;
double r101954 = x;
double r101955 = sqrt(r101954);
double r101956 = r101953 / r101955;
double r101957 = r101954 + r101953;
double r101958 = sqrt(r101957);
double r101959 = r101953 / r101958;
double r101960 = r101956 - r101959;
return r101960;
}
double f(double x) {
double r101961 = 1.0;
double r101962 = sqrt(r101961);
double r101963 = r101962 / r101961;
double r101964 = x;
double r101965 = sqrt(r101964);
double r101966 = r101963 / r101965;
double r101967 = r101964 + r101961;
double r101968 = sqrt(r101967);
double r101969 = fma(r101968, r101965, r101967);
double r101970 = r101962 / r101969;
double r101971 = r101966 * r101970;
return r101971;
}




Bits error versus x
| Original | 19.9 |
|---|---|
| Target | 0.7 |
| Herbie | 0.3 |
Initial program 19.9
rmApplied frac-sub19.9
rmApplied flip--19.7
Simplified19.3
Simplified19.3
Taylor expanded around 0 0.4
rmApplied add-sqr-sqrt0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019304 +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)))))