double f(double x) {
double r13647236 = 1.0;
double r13647237 = x;
double r13647238 = sqrt(r13647237);
double r13647239 = r13647236 / r13647238;
double r13647240 = r13647237 + r13647236;
double r13647241 = sqrt(r13647240);
double r13647242 = r13647236 / r13647241;
double r13647243 = r13647239 - r13647242;
return r13647243;
}
double f(double x) {
double r13647244 = 1.0;
double r13647245 = x;
double r13647246 = sqrt(r13647245);
double r13647247 = r13647244 / r13647246;
double r13647248 = r13647245 + r13647244;
double r13647249 = sqrt(r13647248);
double r13647250 = r13647249 + r13647246;
double r13647251 = r13647244 / r13647249;
double r13647252 = r13647250 / r13647251;
double r13647253 = r13647247 / r13647252;
return r13647253;
}
\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{1}{\sqrt{x}}}{\frac{\sqrt{x + 1} + \sqrt{x}}{\frac{1}{\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 associate-/r*0.4
rmApplied *-un-lft-identity0.4
Applied times-frac0.4
Applied associate-/l*0.4
Final simplification0.4
herbie shell --seed 2019101
(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)))))