double f(double x_re, double x_im) {
double r67114719 = x_re;
double r67114720 = r67114719 * r67114719;
double r67114721 = x_im;
double r67114722 = r67114721 * r67114721;
double r67114723 = r67114720 - r67114722;
double r67114724 = r67114723 * r67114719;
double r67114725 = r67114719 * r67114721;
double r67114726 = r67114721 * r67114719;
double r67114727 = r67114725 + r67114726;
double r67114728 = r67114727 * r67114721;
double r67114729 = r67114724 - r67114728;
return r67114729;
}
double f(double x_re, double x_im) {
double r67114730 = x_re;
double r67114731 = x_im;
double r67114732 = r67114730 - r67114731;
double r67114733 = r67114732 * r67114730;
double r67114734 = r67114731 + r67114730;
double r67114735 = r67114733 * r67114734;
double r67114736 = r67114730 * r67114731;
double r67114737 = r67114736 + r67114736;
double r67114738 = r67114737 * r67114731;
double r67114739 = r67114735 - r67114738;
return r67114739;
}
\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




Bits error versus x.re




Bits error versus x.im
| Original | 6.7 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
Initial program 6.7
rmApplied difference-of-squares6.7
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2019102 +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)))