\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 r7951602 = x_re;
double r7951603 = r7951602 * r7951602;
double r7951604 = x_im;
double r7951605 = r7951604 * r7951604;
double r7951606 = r7951603 - r7951605;
double r7951607 = r7951606 * r7951604;
double r7951608 = r7951602 * r7951604;
double r7951609 = r7951604 * r7951602;
double r7951610 = r7951608 + r7951609;
double r7951611 = r7951610 * r7951602;
double r7951612 = r7951607 + r7951611;
return r7951612;
}
double f(double x_re, double x_im) {
double r7951613 = x_re;
double r7951614 = x_im;
double r7951615 = r7951613 - r7951614;
double r7951616 = r7951615 * r7951614;
double r7951617 = r7951614 + r7951613;
double r7951618 = r7951616 * r7951617;
double r7951619 = r7951613 * r7951614;
double r7951620 = r7951619 + r7951619;
double r7951621 = r7951613 * r7951620;
double r7951622 = r7951618 + r7951621;
return r7951622;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.1 |
|---|---|
| Target | 0.3 |
| Herbie | 0.3 |
Initial program 7.1
rmApplied difference-of-squares7.1
Applied associate-*l*0.3
Final simplification0.3
herbie shell --seed 2019163 +o rules:numerics
(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)))