\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 r133617 = x_re;
double r133618 = r133617 * r133617;
double r133619 = x_im;
double r133620 = r133619 * r133619;
double r133621 = r133618 - r133620;
double r133622 = r133621 * r133617;
double r133623 = r133617 * r133619;
double r133624 = r133619 * r133617;
double r133625 = r133623 + r133624;
double r133626 = r133625 * r133619;
double r133627 = r133622 - r133626;
return r133627;
}
double f(double x_re, double x_im) {
double r133628 = x_re;
double r133629 = 3.0;
double r133630 = pow(r133628, r133629);
double r133631 = x_im;
double r133632 = r133628 * r133631;
double r133633 = r133631 * r133632;
double r133634 = r133629 * r133633;
double r133635 = r133630 - r133634;
return r133635;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 7.1
Simplified0.2
Final simplification0.2
herbie shell --seed 2019304
(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)))