\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{1}{\sqrt{x}} \cdot \frac{1}{\mathsf{fma}\left(\sqrt{x + 1}, \sqrt{x}, x + 1\right)}double f(double x) {
double r102452 = 1.0;
double r102453 = x;
double r102454 = sqrt(r102453);
double r102455 = r102452 / r102454;
double r102456 = r102453 + r102452;
double r102457 = sqrt(r102456);
double r102458 = r102452 / r102457;
double r102459 = r102455 - r102458;
return r102459;
}
double f(double x) {
double r102460 = 1.0;
double r102461 = x;
double r102462 = sqrt(r102461);
double r102463 = r102460 / r102462;
double r102464 = 1.0;
double r102465 = r102461 + r102464;
double r102466 = sqrt(r102465);
double r102467 = fma(r102466, r102462, r102465);
double r102468 = r102460 / r102467;
double r102469 = r102463 * r102468;
return r102469;
}




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
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)))))