\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(\left(3 \cdot x.re\right) \cdot x.im\right) \cdot x.imdouble f(double x_re, double x_im) {
double r310929 = x_re;
double r310930 = r310929 * r310929;
double r310931 = x_im;
double r310932 = r310931 * r310931;
double r310933 = r310930 - r310932;
double r310934 = r310933 * r310929;
double r310935 = r310929 * r310931;
double r310936 = r310931 * r310929;
double r310937 = r310935 + r310936;
double r310938 = r310937 * r310931;
double r310939 = r310934 - r310938;
return r310939;
}
double f(double x_re, double x_im) {
double r310940 = x_re;
double r310941 = 3.0;
double r310942 = pow(r310940, r310941);
double r310943 = r310941 * r310940;
double r310944 = x_im;
double r310945 = r310943 * r310944;
double r310946 = r310945 * r310944;
double r310947 = r310942 - r310946;
return r310947;
}




Bits error versus x.re




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