\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 r119827 = 1.0;
double r119828 = x;
double r119829 = sqrt(r119828);
double r119830 = r119827 / r119829;
double r119831 = r119828 + r119827;
double r119832 = sqrt(r119831);
double r119833 = r119827 / r119832;
double r119834 = r119830 - r119833;
return r119834;
}
double f(double x) {
double r119835 = 1.0;
double r119836 = x;
double r119837 = r119836 + r119835;
double r119838 = cbrt(r119837);
double r119839 = r119838 * r119838;
double r119840 = sqrt(r119839);
double r119841 = sqrt(r119838);
double r119842 = sqrt(r119836);
double r119843 = fma(r119840, r119841, r119842);
double r119844 = r119835 * r119843;
double r119845 = r119835 / r119844;
double r119846 = sqrt(r119837);
double r119847 = r119846 * r119842;
double r119848 = r119845 / r119847;
return r119848;
}




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)))))