\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) + x.re \cdot \left(x.re \cdot x.im + x.re \cdot x.im\right)
double f(double x_re, double x_im) {
double r8409744 = x_re;
double r8409745 = r8409744 * r8409744;
double r8409746 = x_im;
double r8409747 = r8409746 * r8409746;
double r8409748 = r8409745 - r8409747;
double r8409749 = r8409748 * r8409746;
double r8409750 = r8409744 * r8409746;
double r8409751 = r8409746 * r8409744;
double r8409752 = r8409750 + r8409751;
double r8409753 = r8409752 * r8409744;
double r8409754 = r8409749 + r8409753;
return r8409754;
}
double f(double x_re, double x_im) {
double r8409755 = x_re;
double r8409756 = x_im;
double r8409757 = r8409755 - r8409756;
double r8409758 = r8409757 * r8409756;
double r8409759 = r8409756 + r8409755;
double r8409760 = r8409758 * r8409759;
double r8409761 = r8409755 * r8409756;
double r8409762 = r8409761 + r8409761;
double r8409763 = r8409755 * r8409762;
double r8409764 = r8409760 + r8409763;
return r8409764;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 6.9 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 6.9
rmApplied difference-of-squares6.9
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2019137
(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)))