\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 r10036972 = x_re;
double r10036973 = r10036972 * r10036972;
double r10036974 = x_im;
double r10036975 = r10036974 * r10036974;
double r10036976 = r10036973 - r10036975;
double r10036977 = r10036976 * r10036972;
double r10036978 = r10036972 * r10036974;
double r10036979 = r10036974 * r10036972;
double r10036980 = r10036978 + r10036979;
double r10036981 = r10036980 * r10036974;
double r10036982 = r10036977 - r10036981;
return r10036982;
}
double f(double x_re, double x_im) {
double r10036983 = x_re;
double r10036984 = x_im;
double r10036985 = r10036983 - r10036984;
double r10036986 = r10036985 * r10036983;
double r10036987 = r10036984 + r10036983;
double r10036988 = r10036986 * r10036987;
double r10036989 = r10036983 * r10036984;
double r10036990 = r10036989 + r10036989;
double r10036991 = r10036990 * r10036984;
double r10036992 = r10036988 - r10036991;
return r10036992;
}




Bits error versus x.re




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