double f(double x) {
double r12400235 = 1.0;
double r12400236 = x;
double r12400237 = sqrt(r12400236);
double r12400238 = r12400235 / r12400237;
double r12400239 = r12400236 + r12400235;
double r12400240 = sqrt(r12400239);
double r12400241 = r12400235 / r12400240;
double r12400242 = r12400238 - r12400241;
return r12400242;
}
double f(double x) {
double r12400243 = 1.0;
double r12400244 = x;
double r12400245 = r12400244 + r12400243;
double r12400246 = sqrt(r12400245);
double r12400247 = sqrt(r12400244);
double r12400248 = r12400246 * r12400247;
double r12400249 = r12400243 / r12400248;
double r12400250 = r12400247 + r12400246;
double r12400251 = r12400249 / r12400250;
return r12400251;
}
\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{1}{\sqrt{x + 1} \cdot \sqrt{x}}}{\sqrt{x} + \sqrt{x + 1}}



Bits error versus x
| Original | 20.4 |
|---|---|
| Target | 0.7 |
| Herbie | 0.4 |
Initial program 20.4
rmApplied frac-sub20.4
Simplified20.4
rmApplied flip--20.2
Applied associate-/l/20.2
Simplified0.8
rmApplied *-un-lft-identity0.8
Applied times-frac0.4
rmApplied un-div-inv0.4
Final simplification0.4
herbie shell --seed 2019101 +o rules:numerics
(FPCore (x)
:name "2isqrt (example 3.6)"
:herbie-target
(/ 1 (+ (* (+ x 1) (sqrt x)) (* x (sqrt (+ x 1)))))
(- (/ 1 (sqrt x)) (/ 1 (sqrt (+ x 1)))))