\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\left(\left(\sqrt{x + 1} \cdot \sqrt{x + 1} - \sqrt{x + 1} \cdot \sqrt{x}\right) + \sqrt{x} \cdot \sqrt{x}\right) \cdot \frac{1}{\sqrt{x} \cdot x + \left(x + 1\right) \cdot \sqrt{x + 1}}}{\sqrt{x + 1} \cdot \sqrt{x}}double f(double x) {
double r5033031 = 1.0;
double r5033032 = x;
double r5033033 = sqrt(r5033032);
double r5033034 = r5033031 / r5033033;
double r5033035 = r5033032 + r5033031;
double r5033036 = sqrt(r5033035);
double r5033037 = r5033031 / r5033036;
double r5033038 = r5033034 - r5033037;
return r5033038;
}
double f(double x) {
double r5033039 = x;
double r5033040 = 1.0;
double r5033041 = r5033039 + r5033040;
double r5033042 = sqrt(r5033041);
double r5033043 = r5033042 * r5033042;
double r5033044 = sqrt(r5033039);
double r5033045 = r5033042 * r5033044;
double r5033046 = r5033043 - r5033045;
double r5033047 = r5033044 * r5033044;
double r5033048 = r5033046 + r5033047;
double r5033049 = r5033044 * r5033039;
double r5033050 = r5033041 * r5033042;
double r5033051 = r5033049 + r5033050;
double r5033052 = r5033040 / r5033051;
double r5033053 = r5033048 * r5033052;
double r5033054 = r5033053 / r5033045;
return r5033054;
}




Bits error versus x
Results
| Original | 20.1 |
|---|---|
| Target | 0.6 |
| Herbie | 0.6 |
Initial program 20.1
rmApplied frac-sub20.0
rmApplied flip--19.8
Simplified19.4
Simplified19.4
rmApplied flip3-+19.4
Applied associate-/r/19.4
Simplified0.6
Final simplification0.6
herbie shell --seed 2019162
(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)))))