\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\left(\left(\sqrt{x} \cdot \sqrt{x} - \sqrt{x + 1} \cdot \sqrt{x}\right) + \sqrt{x + 1} \cdot \sqrt{x + 1}\right) \cdot \frac{1}{\mathsf{fma}\left(x + 1, \sqrt{x + 1}, x \cdot \sqrt{x}\right)}}{\sqrt{x + 1} \cdot \sqrt{x}}double f(double x) {
double r2347210 = 1.0;
double r2347211 = x;
double r2347212 = sqrt(r2347211);
double r2347213 = r2347210 / r2347212;
double r2347214 = r2347211 + r2347210;
double r2347215 = sqrt(r2347214);
double r2347216 = r2347210 / r2347215;
double r2347217 = r2347213 - r2347216;
return r2347217;
}
double f(double x) {
double r2347218 = x;
double r2347219 = sqrt(r2347218);
double r2347220 = r2347219 * r2347219;
double r2347221 = 1.0;
double r2347222 = r2347218 + r2347221;
double r2347223 = sqrt(r2347222);
double r2347224 = r2347223 * r2347219;
double r2347225 = r2347220 - r2347224;
double r2347226 = r2347223 * r2347223;
double r2347227 = r2347225 + r2347226;
double r2347228 = r2347218 * r2347219;
double r2347229 = fma(r2347222, r2347223, r2347228);
double r2347230 = r2347221 / r2347229;
double r2347231 = r2347227 * r2347230;
double r2347232 = r2347231 / r2347224;
return r2347232;
}




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