\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\sqrt{1}}{\sqrt{x}} \cdot \frac{\sqrt{1}}{\mathsf{fma}\left(\sqrt{x} \cdot \sqrt{1 + x}, 1, \left(1 + x\right) \cdot 1\right)}double f(double x) {
double r6152969 = 1.0;
double r6152970 = x;
double r6152971 = sqrt(r6152970);
double r6152972 = r6152969 / r6152971;
double r6152973 = r6152970 + r6152969;
double r6152974 = sqrt(r6152973);
double r6152975 = r6152969 / r6152974;
double r6152976 = r6152972 - r6152975;
return r6152976;
}
double f(double x) {
double r6152977 = 1.0;
double r6152978 = sqrt(r6152977);
double r6152979 = x;
double r6152980 = sqrt(r6152979);
double r6152981 = r6152978 / r6152980;
double r6152982 = r6152977 + r6152979;
double r6152983 = sqrt(r6152982);
double r6152984 = r6152980 * r6152983;
double r6152985 = r6152982 * r6152977;
double r6152986 = fma(r6152984, r6152977, r6152985);
double r6152987 = r6152978 / r6152986;
double r6152988 = r6152981 * r6152987;
return r6152988;
}




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