\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{1}{1 \cdot \mathsf{fma}\left(\sqrt{\sqrt[3]{x} \cdot \sqrt[3]{x}}, \sqrt{\sqrt[3]{x}}, \sqrt{x + 1}\right)}}{\sqrt{x} \cdot \sqrt{x + 1}}double f(double x) {
double r102607 = 1.0;
double r102608 = x;
double r102609 = sqrt(r102608);
double r102610 = r102607 / r102609;
double r102611 = r102608 + r102607;
double r102612 = sqrt(r102611);
double r102613 = r102607 / r102612;
double r102614 = r102610 - r102613;
return r102614;
}
double f(double x) {
double r102615 = 1.0;
double r102616 = x;
double r102617 = cbrt(r102616);
double r102618 = r102617 * r102617;
double r102619 = sqrt(r102618);
double r102620 = sqrt(r102617);
double r102621 = r102616 + r102615;
double r102622 = sqrt(r102621);
double r102623 = fma(r102619, r102620, r102622);
double r102624 = r102615 * r102623;
double r102625 = r102615 / r102624;
double r102626 = sqrt(r102616);
double r102627 = r102626 * r102622;
double r102628 = r102625 / r102627;
return r102628;
}




Bits error versus x
| Original | 19.4 |
|---|---|
| Target | 0.6 |
| Herbie | 0.4 |
Initial program 19.4
rmApplied frac-sub19.4
rmApplied flip--19.2
Simplified18.8
Simplified18.8
Taylor expanded around 0 0.4
rmApplied add-cube-cbrt0.4
Applied sqrt-prod0.4
Applied fma-def0.4
Final simplification0.4
herbie shell --seed 2019303 +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)))))