\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{1}{1}}{\sqrt{x}} \cdot \frac{1}{\mathsf{fma}\left(\sqrt{x + 1}, \sqrt{x}, x + 1\right)}double f(double x) {
double r113670 = 1.0;
double r113671 = x;
double r113672 = sqrt(r113671);
double r113673 = r113670 / r113672;
double r113674 = r113671 + r113670;
double r113675 = sqrt(r113674);
double r113676 = r113670 / r113675;
double r113677 = r113673 - r113676;
return r113677;
}
double f(double x) {
double r113678 = 1.0;
double r113679 = 1.0;
double r113680 = r113678 / r113679;
double r113681 = x;
double r113682 = sqrt(r113681);
double r113683 = r113680 / r113682;
double r113684 = r113681 + r113679;
double r113685 = sqrt(r113684);
double r113686 = fma(r113685, r113682, r113684);
double r113687 = r113679 / r113686;
double r113688 = r113683 * r113687;
return r113688;
}




Bits error versus x
| Original | 19.6 |
|---|---|
| Target | 0.7 |
| Herbie | 0.3 |
Initial program 19.6
rmApplied frac-sub19.6
rmApplied flip--19.5
Simplified19.1
Simplified19.1
Taylor expanded around 0 0.4
rmApplied *-un-lft-identity0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019323 +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)))))