\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 r365416 = x_re;
double r365417 = r365416 * r365416;
double r365418 = x_im;
double r365419 = r365418 * r365418;
double r365420 = r365417 - r365419;
double r365421 = r365420 * r365416;
double r365422 = r365416 * r365418;
double r365423 = r365418 * r365416;
double r365424 = r365422 + r365423;
double r365425 = r365424 * r365418;
double r365426 = r365421 - r365425;
return r365426;
}
double f(double x_re, double x_im) {
double r365427 = x_re;
double r365428 = 3.0;
double r365429 = pow(r365427, r365428);
double r365430 = x_im;
double r365431 = r365427 * r365430;
double r365432 = r365430 * r365431;
double r365433 = r365428 * r365432;
double r365434 = r365429 - r365433;
return r365434;
}




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
Final simplification0.2
herbie shell --seed 2020049
(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)))