\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{1}{1 \cdot \mathsf{fma}\left(\sqrt{\sqrt[3]{x + 1} \cdot \sqrt[3]{x + 1}}, \sqrt{\sqrt[3]{x + 1}}, \sqrt{x}\right)}}{\sqrt{x + 1} \cdot \sqrt{x}}double f(double x) {
double r153166 = 1.0;
double r153167 = x;
double r153168 = sqrt(r153167);
double r153169 = r153166 / r153168;
double r153170 = r153167 + r153166;
double r153171 = sqrt(r153170);
double r153172 = r153166 / r153171;
double r153173 = r153169 - r153172;
return r153173;
}
double f(double x) {
double r153174 = 1.0;
double r153175 = x;
double r153176 = r153175 + r153174;
double r153177 = cbrt(r153176);
double r153178 = r153177 * r153177;
double r153179 = sqrt(r153178);
double r153180 = sqrt(r153177);
double r153181 = sqrt(r153175);
double r153182 = fma(r153179, r153180, r153181);
double r153183 = r153174 * r153182;
double r153184 = r153174 / r153183;
double r153185 = sqrt(r153176);
double r153186 = r153185 * r153181;
double r153187 = r153184 / r153186;
return r153187;
}




Bits error versus x
| Original | 20.2 |
|---|---|
| Target | 0.7 |
| Herbie | 0.4 |
Initial program 20.2
rmApplied frac-sub20.2
Simplified20.2
rmApplied flip--20.0
Simplified19.6
Simplified19.6
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 2019194 +o rules:numerics
(FPCore (x)
:name "2isqrt (example 3.6)"
:herbie-target
(/ 1.0 (+ (* (+ x 1.0) (sqrt x)) (* x (sqrt (+ x 1.0)))))
(- (/ 1.0 (sqrt x)) (/ 1.0 (sqrt (+ x 1.0)))))