\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{1}{1 \cdot \mathsf{fma}\left(\sqrt{\sqrt[3]{x} \cdot \sqrt[3]{x}}, \sqrt{\sqrt[3]{x}}, \sqrt{x + 1}\right)}}{\sqrt{x} \cdot \sqrt{x + 1}}double f(double x) {
double r70283 = 1.0;
double r70284 = x;
double r70285 = sqrt(r70284);
double r70286 = r70283 / r70285;
double r70287 = r70284 + r70283;
double r70288 = sqrt(r70287);
double r70289 = r70283 / r70288;
double r70290 = r70286 - r70289;
return r70290;
}
double f(double x) {
double r70291 = 1.0;
double r70292 = x;
double r70293 = cbrt(r70292);
double r70294 = r70293 * r70293;
double r70295 = sqrt(r70294);
double r70296 = sqrt(r70293);
double r70297 = r70292 + r70291;
double r70298 = sqrt(r70297);
double r70299 = fma(r70295, r70296, r70298);
double r70300 = r70291 * r70299;
double r70301 = r70291 / r70300;
double r70302 = sqrt(r70292);
double r70303 = r70302 * r70298;
double r70304 = r70301 / r70303;
return r70304;
}




Bits error versus x
| Original | 19.4 |
|---|---|
| Target | 0.6 |
| Herbie | 0.4 |
Initial program 19.4
rmApplied frac-sub19.4
rmApplied flip--19.2
Simplified18.8
Simplified18.8
Taylor expanded around 0 0.4
rmApplied add-cube-cbrt0.4
Applied sqrt-prod0.4
Applied fma-def0.4
Final simplification0.4
herbie shell --seed 2019303 +o rules:numerics
(FPCore (x)
:name "2isqrt (example 3.6)"
:precision binary64
:herbie-target
(/ 1 (+ (* (+ x 1) (sqrt x)) (* x (sqrt (+ x 1)))))
(- (/ 1 (sqrt x)) (/ 1 (sqrt (+ x 1)))))