\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 x.im\right) \cdot \left(x.re \cdot x.im\right)double f(double x_re, double x_im) {
double r110942 = x_re;
double r110943 = r110942 * r110942;
double r110944 = x_im;
double r110945 = r110944 * r110944;
double r110946 = r110943 - r110945;
double r110947 = r110946 * r110942;
double r110948 = r110942 * r110944;
double r110949 = r110944 * r110942;
double r110950 = r110948 + r110949;
double r110951 = r110950 * r110944;
double r110952 = r110947 - r110951;
return r110952;
}
double f(double x_re, double x_im) {
double r110953 = x_re;
double r110954 = 3.0;
double r110955 = pow(r110953, r110954);
double r110956 = x_im;
double r110957 = r110954 * r110956;
double r110958 = r110953 * r110956;
double r110959 = r110957 * r110958;
double r110960 = r110955 - r110959;
return r110960;
}




Bits error versus x.re




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