\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.re - \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.im
\left(\left(x.re - x.im\right) \cdot x.re\right) \cdot \left(x.im + x.re\right) - \left(x.im \cdot \sqrt[3]{x.re \cdot x.im + x.re \cdot x.im}\right) \cdot \left(\sqrt[3]{x.re \cdot x.im + x.re \cdot x.im} \cdot \left(\sqrt[3]{\sqrt[3]{x.re \cdot x.im + x.re \cdot x.im} \cdot \sqrt[3]{x.re \cdot x.im + x.re \cdot x.im}} \cdot \sqrt[3]{\sqrt[3]{x.re \cdot x.im + x.re \cdot x.im}}\right)\right)double f(double x_re, double x_im) {
double r7905861 = x_re;
double r7905862 = r7905861 * r7905861;
double r7905863 = x_im;
double r7905864 = r7905863 * r7905863;
double r7905865 = r7905862 - r7905864;
double r7905866 = r7905865 * r7905861;
double r7905867 = r7905861 * r7905863;
double r7905868 = r7905863 * r7905861;
double r7905869 = r7905867 + r7905868;
double r7905870 = r7905869 * r7905863;
double r7905871 = r7905866 - r7905870;
return r7905871;
}
double f(double x_re, double x_im) {
double r7905872 = x_re;
double r7905873 = x_im;
double r7905874 = r7905872 - r7905873;
double r7905875 = r7905874 * r7905872;
double r7905876 = r7905873 + r7905872;
double r7905877 = r7905875 * r7905876;
double r7905878 = r7905872 * r7905873;
double r7905879 = r7905878 + r7905878;
double r7905880 = cbrt(r7905879);
double r7905881 = r7905873 * r7905880;
double r7905882 = r7905880 * r7905880;
double r7905883 = cbrt(r7905882);
double r7905884 = cbrt(r7905880);
double r7905885 = r7905883 * r7905884;
double r7905886 = r7905880 * r7905885;
double r7905887 = r7905881 * r7905886;
double r7905888 = r7905877 - r7905887;
return r7905888;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.1 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
Initial program 7.1
Taylor expanded around 0 7.0
Simplified0.3
rmApplied add-cube-cbrt0.6
Applied associate-*l*0.6
rmApplied add-cube-cbrt0.6
Applied cbrt-prod0.7
Final simplification0.7
herbie shell --seed 2019172 +o rules:numerics
(FPCore (x.re x.im)
:name "math.cube on complex, real part"
:herbie-target
(+ (* (* x.re x.re) (- x.re x.im)) (* (* x.re x.im) (- x.re (* 3.0 x.im))))
(- (* (- (* x.re x.re) (* x.im x.im)) x.re) (* (+ (* x.re x.im) (* x.im x.re)) x.im)))