\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re
\left(\left(x.re - x.im\right) \cdot x.im\right) \cdot \left(x.im + x.re\right) + \left(\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}\right) \cdot \left(\sqrt[3]{x.re \cdot x.im + x.re \cdot x.im} \cdot x.re\right)double f(double x_re, double x_im) {
double r10676852 = x_re;
double r10676853 = r10676852 * r10676852;
double r10676854 = x_im;
double r10676855 = r10676854 * r10676854;
double r10676856 = r10676853 - r10676855;
double r10676857 = r10676856 * r10676854;
double r10676858 = r10676852 * r10676854;
double r10676859 = r10676854 * r10676852;
double r10676860 = r10676858 + r10676859;
double r10676861 = r10676860 * r10676852;
double r10676862 = r10676857 + r10676861;
return r10676862;
}
double f(double x_re, double x_im) {
double r10676863 = x_re;
double r10676864 = x_im;
double r10676865 = r10676863 - r10676864;
double r10676866 = r10676865 * r10676864;
double r10676867 = r10676864 + r10676863;
double r10676868 = r10676866 * r10676867;
double r10676869 = r10676863 * r10676864;
double r10676870 = r10676869 + r10676869;
double r10676871 = cbrt(r10676870);
double r10676872 = r10676871 * r10676871;
double r10676873 = r10676871 * r10676863;
double r10676874 = r10676872 * r10676873;
double r10676875 = r10676868 + r10676874;
return r10676875;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.6 |
Initial program 7.1
rmApplied difference-of-squares7.1
Applied associate-*l*0.2
rmApplied add-cube-cbrt0.6
Applied associate-*l*0.6
Final simplification0.6
herbie shell --seed 2019168
(FPCore (x.re x.im)
:name "math.cube on complex, imaginary part"
:herbie-target
(+ (* (* x.re x.im) (* 2.0 x.re)) (* (* x.im (- x.re x.im)) (+ x.re x.im)))
(+ (* (- (* x.re x.re) (* x.im x.im)) x.im) (* (+ (* x.re x.im) (* x.im x.re)) x.re)))