\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} - 3 \cdot \left(x.im \cdot \left(x.re \cdot x.im\right)\right)double f(double x_re, double x_im) {
double r139919 = x_re;
double r139920 = r139919 * r139919;
double r139921 = x_im;
double r139922 = r139921 * r139921;
double r139923 = r139920 - r139922;
double r139924 = r139923 * r139919;
double r139925 = r139919 * r139921;
double r139926 = r139921 * r139919;
double r139927 = r139925 + r139926;
double r139928 = r139927 * r139921;
double r139929 = r139924 - r139928;
return r139929;
}
double f(double x_re, double x_im) {
double r139930 = x_re;
double r139931 = 3.0;
double r139932 = pow(r139930, r139931);
double r139933 = x_im;
double r139934 = r139930 * r139933;
double r139935 = r139933 * r139934;
double r139936 = r139931 * r139935;
double r139937 = r139932 - r139936;
return r139937;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 7.6
Simplified0.2
rmApplied add-cube-cbrt0.2
Applied associate-*l*0.2
rmApplied associate-*r*0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019308
(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)))