\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\mathsf{fma}\left(\frac{1}{\sqrt{\sqrt[3]{x} \cdot \sqrt[3]{x}}}, \frac{1}{\sqrt{\sqrt[3]{x}}}, \frac{1}{\sqrt{\sqrt[3]{1 + x} \cdot \sqrt[3]{1 + x}}} \cdot \frac{-1}{\sqrt{\sqrt[3]{1 + x}}}\right) + \mathsf{fma}\left(\frac{-1}{\sqrt{\sqrt[3]{1 + x}}}, \frac{1}{\sqrt{\sqrt[3]{1 + x} \cdot \sqrt[3]{1 + x}}}, \frac{1}{\sqrt{\sqrt[3]{1 + x} \cdot \sqrt[3]{1 + x}}} \cdot \frac{1}{\sqrt{\sqrt[3]{1 + x}}}\right)double f(double x) {
double r4505082 = 1.0;
double r4505083 = x;
double r4505084 = sqrt(r4505083);
double r4505085 = r4505082 / r4505084;
double r4505086 = r4505083 + r4505082;
double r4505087 = sqrt(r4505086);
double r4505088 = r4505082 / r4505087;
double r4505089 = r4505085 - r4505088;
return r4505089;
}
double f(double x) {
double r4505090 = 1.0;
double r4505091 = x;
double r4505092 = cbrt(r4505091);
double r4505093 = r4505092 * r4505092;
double r4505094 = sqrt(r4505093);
double r4505095 = r4505090 / r4505094;
double r4505096 = sqrt(r4505092);
double r4505097 = r4505090 / r4505096;
double r4505098 = r4505090 + r4505091;
double r4505099 = cbrt(r4505098);
double r4505100 = r4505099 * r4505099;
double r4505101 = sqrt(r4505100);
double r4505102 = r4505090 / r4505101;
double r4505103 = -1.0;
double r4505104 = sqrt(r4505099);
double r4505105 = r4505103 / r4505104;
double r4505106 = r4505102 * r4505105;
double r4505107 = fma(r4505095, r4505097, r4505106);
double r4505108 = r4505090 / r4505104;
double r4505109 = r4505102 * r4505108;
double r4505110 = fma(r4505105, r4505102, r4505109);
double r4505111 = r4505107 + r4505110;
return r4505111;
}




Bits error versus x
| Original | 20.1 |
|---|---|
| Target | 0.6 |
| Herbie | 20.5 |
Initial program 20.1
rmApplied add-cube-cbrt25.6
Applied sqrt-prod25.9
Applied add-sqr-sqrt25.9
Applied times-frac26.7
Applied add-cube-cbrt25.0
Applied sqrt-prod24.1
Applied add-sqr-sqrt24.1
Applied times-frac20.5
Applied prod-diff20.5
Final simplification20.5
herbie shell --seed 2019162 +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)))))