\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
{x.re}^{3} - \sqrt{3} \cdot \left(\left(\sqrt[3]{\sqrt{3}} \cdot \sqrt[3]{\sqrt{3}}\right) \cdot \left(\sqrt[3]{\sqrt{3}} \cdot \left(\left(x.im \cdot x.re\right) \cdot x.im\right)\right)\right)double f(double x_re, double x_im) {
double r128678 = x_re;
double r128679 = r128678 * r128678;
double r128680 = x_im;
double r128681 = r128680 * r128680;
double r128682 = r128679 - r128681;
double r128683 = r128682 * r128678;
double r128684 = r128678 * r128680;
double r128685 = r128680 * r128678;
double r128686 = r128684 + r128685;
double r128687 = r128686 * r128680;
double r128688 = r128683 - r128687;
return r128688;
}
double f(double x_re, double x_im) {
double r128689 = x_re;
double r128690 = 3.0;
double r128691 = pow(r128689, r128690);
double r128692 = sqrt(r128690);
double r128693 = cbrt(r128692);
double r128694 = r128693 * r128693;
double r128695 = x_im;
double r128696 = r128695 * r128689;
double r128697 = r128696 * r128695;
double r128698 = r128693 * r128697;
double r128699 = r128694 * r128698;
double r128700 = r128692 * r128699;
double r128701 = r128691 - r128700;
return r128701;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
Initial program 7.6
Simplified0.2
rmApplied add-sqr-sqrt0.4
Applied associate-*l*0.3
rmApplied add-cube-cbrt0.2
Applied associate-*l*0.3
Final simplification0.3
herbie shell --seed 2019322
(FPCore (x.re x.im)
:name "math.cube on complex, real part"
:precision binary64
:herbie-target
(+ (* (* x.re x.re) (- x.re x.im)) (* (* x.re x.im) (- x.re (* 3 x.im))))
(- (* (- (* x.re x.re) (* x.im x.im)) x.re) (* (+ (* x.re x.im) (* x.im x.re)) x.im)))