\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) + \sqrt[3]{x.re} \cdot \left(\left(\left(x.re \cdot \left(x.im + x.im\right)\right) \cdot \sqrt[3]{x.re}\right) \cdot \sqrt[3]{x.re}\right)double f(double x_re, double x_im) {
double r10061779 = x_re;
double r10061780 = r10061779 * r10061779;
double r10061781 = x_im;
double r10061782 = r10061781 * r10061781;
double r10061783 = r10061780 - r10061782;
double r10061784 = r10061783 * r10061781;
double r10061785 = r10061779 * r10061781;
double r10061786 = r10061781 * r10061779;
double r10061787 = r10061785 + r10061786;
double r10061788 = r10061787 * r10061779;
double r10061789 = r10061784 + r10061788;
return r10061789;
}
double f(double x_re, double x_im) {
double r10061790 = x_re;
double r10061791 = x_im;
double r10061792 = r10061790 - r10061791;
double r10061793 = r10061792 * r10061791;
double r10061794 = r10061791 + r10061790;
double r10061795 = r10061793 * r10061794;
double r10061796 = cbrt(r10061790);
double r10061797 = r10061791 + r10061791;
double r10061798 = r10061790 * r10061797;
double r10061799 = r10061798 * r10061796;
double r10061800 = r10061799 * r10061796;
double r10061801 = r10061796 * r10061800;
double r10061802 = r10061795 + r10061801;
return r10061802;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.1 |
|---|---|
| Target | 0.3 |
| Herbie | 0.5 |
Initial program 7.1
rmApplied difference-of-squares7.1
Applied associate-*l*0.3
rmApplied add-cube-cbrt0.5
Applied associate-*r*0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019163
(FPCore (x.re x.im)
:name "math.cube on complex, imaginary part"
:herbie-target
(+ (* (* x.re x.im) (* 2 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)))