\frac{x0}{1 - x1} - x0\sqrt[3]{{\left(\mathsf{fma}\left(\frac{{x0}^{\frac{2}{3}}}{\sqrt{1} + \sqrt{x1}}, \frac{1}{\frac{\sqrt{1} - \sqrt{x1}}{\sqrt[3]{x0}}}, -x0\right)\right)}^{3}}double f(double x0, double x1) {
double r148811 = x0;
double r148812 = 1.0;
double r148813 = x1;
double r148814 = r148812 - r148813;
double r148815 = r148811 / r148814;
double r148816 = r148815 - r148811;
return r148816;
}
double f(double x0, double x1) {
double r148817 = x0;
double r148818 = 0.6666666666666666;
double r148819 = pow(r148817, r148818);
double r148820 = 1.0;
double r148821 = sqrt(r148820);
double r148822 = x1;
double r148823 = sqrt(r148822);
double r148824 = r148821 + r148823;
double r148825 = r148819 / r148824;
double r148826 = 1.0;
double r148827 = r148821 - r148823;
double r148828 = cbrt(r148817);
double r148829 = r148827 / r148828;
double r148830 = r148826 / r148829;
double r148831 = -r148817;
double r148832 = fma(r148825, r148830, r148831);
double r148833 = 3.0;
double r148834 = pow(r148832, r148833);
double r148835 = cbrt(r148834);
return r148835;
}




Bits error versus x0




Bits error versus x1
| Original | 7.9 |
|---|---|
| Target | 0.3 |
| Herbie | 6.7 |
Initial program 7.9
rmApplied add-sqr-sqrt7.9
Applied add-sqr-sqrt7.9
Applied difference-of-squares7.9
Applied add-cube-cbrt7.9
Applied times-frac7.8
Applied fma-neg7.4
rmApplied add-cbrt-cube7.4
Simplified7.4
rmApplied *-un-lft-identity7.4
Applied cbrt-prod7.4
Applied associate-/l*6.7
Final simplification6.7
herbie shell --seed 2019322 +o rules:numerics
(FPCore (x0 x1)
:name "(- (/ x0 (- 1 x1)) x0)"
:precision binary64
:pre (or (and (== x0 1.855) (== x1 0.000209)) (and (== x0 2.985) (== x1 0.0186)))
:herbie-target
(/ (* x0 x1) (- 1 x1))
(- (/ x0 (- 1 x1)) x0))