\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re
\mathsf{fma}\left(x.re, \left(3 \cdot x.im\right) \cdot x.re, -{x.im}^{3}\right)double f(double x_re, double x_im) {
double r222904 = x_re;
double r222905 = r222904 * r222904;
double r222906 = x_im;
double r222907 = r222906 * r222906;
double r222908 = r222905 - r222907;
double r222909 = r222908 * r222906;
double r222910 = r222904 * r222906;
double r222911 = r222906 * r222904;
double r222912 = r222910 + r222911;
double r222913 = r222912 * r222904;
double r222914 = r222909 + r222913;
return r222914;
}
double f(double x_re, double x_im) {
double r222915 = x_re;
double r222916 = 3.0;
double r222917 = x_im;
double r222918 = r222916 * r222917;
double r222919 = r222918 * r222915;
double r222920 = pow(r222917, r222916);
double r222921 = -r222920;
double r222922 = fma(r222915, r222919, r222921);
return r222922;
}




Bits error versus x.re




Bits error versus x.im
| Original | 6.9 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 6.9
Simplified0.2
rmApplied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2019303 +o rules:numerics
(FPCore (x.re x.im)
:name "math.cube on complex, imaginary part"
:precision binary64
:herbie-target
(+ (* (* x.re x.im) (* 2 x.re)) (* (* x.im (- x.re x.im)) (+ x.re x.im)))
(+ (* (- (* x.re x.re) (* x.im x.im)) x.im) (* (+ (* x.re x.im) (* x.im x.re)) x.re)))