\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\left(\sqrt{x + 1} \cdot \sqrt{x + 1} + \left(\sqrt{x} \cdot \sqrt{x} - \sqrt{x} \cdot \sqrt{x + 1}\right)\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 r2644752 = 1.0;
double r2644753 = x;
double r2644754 = sqrt(r2644753);
double r2644755 = r2644752 / r2644754;
double r2644756 = r2644753 + r2644752;
double r2644757 = sqrt(r2644756);
double r2644758 = r2644752 / r2644757;
double r2644759 = r2644755 - r2644758;
return r2644759;
}
double f(double x) {
double r2644760 = x;
double r2644761 = 1.0;
double r2644762 = r2644760 + r2644761;
double r2644763 = sqrt(r2644762);
double r2644764 = r2644763 * r2644763;
double r2644765 = sqrt(r2644760);
double r2644766 = r2644765 * r2644765;
double r2644767 = r2644765 * r2644763;
double r2644768 = r2644766 - r2644767;
double r2644769 = r2644764 + r2644768;
double r2644770 = r2644765 * r2644760;
double r2644771 = r2644762 * r2644763;
double r2644772 = r2644770 + r2644771;
double r2644773 = r2644761 / r2644772;
double r2644774 = r2644769 * r2644773;
double r2644775 = r2644763 * r2644765;
double r2644776 = r2644774 / r2644775;
return r2644776;
}




Bits error versus x
Results
| Original | 19.8 |
|---|---|
| Target | 0.7 |
| Herbie | 0.7 |
Initial program 19.8
rmApplied frac-sub19.8
Simplified19.8
rmApplied flip--19.5
Simplified0.4
rmApplied flip3-+0.8
Applied associate-/r/0.8
Simplified0.7
Final simplification0.7
herbie shell --seed 2019137
(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)))))