\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} - \left(3 \cdot \left(x.re \cdot x.im\right)\right) \cdot x.imdouble f(double x_re, double x_im) {
double r390989 = x_re;
double r390990 = r390989 * r390989;
double r390991 = x_im;
double r390992 = r390991 * r390991;
double r390993 = r390990 - r390992;
double r390994 = r390993 * r390989;
double r390995 = r390989 * r390991;
double r390996 = r390991 * r390989;
double r390997 = r390995 + r390996;
double r390998 = r390997 * r390991;
double r390999 = r390994 - r390998;
return r390999;
}
double f(double x_re, double x_im) {
double r391000 = x_re;
double r391001 = 3.0;
double r391002 = pow(r391000, r391001);
double r391003 = x_im;
double r391004 = r391000 * r391003;
double r391005 = r391001 * r391004;
double r391006 = r391005 * r391003;
double r391007 = r391002 - r391006;
return r391007;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 7.3
Simplified0.2
rmApplied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2020047
(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)))