\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
\left(\left(x.re - x.im\right) \cdot x.re\right) \cdot \left(x.im + x.re\right) - \left(x.re \cdot x.im + x.re \cdot x.im\right) \cdot x.im
double f(double x_re, double x_im) {
double r7108494 = x_re;
double r7108495 = r7108494 * r7108494;
double r7108496 = x_im;
double r7108497 = r7108496 * r7108496;
double r7108498 = r7108495 - r7108497;
double r7108499 = r7108498 * r7108494;
double r7108500 = r7108494 * r7108496;
double r7108501 = r7108496 * r7108494;
double r7108502 = r7108500 + r7108501;
double r7108503 = r7108502 * r7108496;
double r7108504 = r7108499 - r7108503;
return r7108504;
}
double f(double x_re, double x_im) {
double r7108505 = x_re;
double r7108506 = x_im;
double r7108507 = r7108505 - r7108506;
double r7108508 = r7108507 * r7108505;
double r7108509 = r7108506 + r7108505;
double r7108510 = r7108508 * r7108509;
double r7108511 = r7108505 * r7108506;
double r7108512 = r7108511 + r7108511;
double r7108513 = r7108512 * r7108506;
double r7108514 = r7108510 - r7108513;
return r7108514;
}




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 2019146 +o rules:numerics
(FPCore (x.re x.im)
:name "math.cube on complex, real part"
: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)))