\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(x.im \cdot 3\right) \cdot \left(x.re \cdot x.im\right)double f(double x_re, double x_im) {
double r216802 = x_re;
double r216803 = r216802 * r216802;
double r216804 = x_im;
double r216805 = r216804 * r216804;
double r216806 = r216803 - r216805;
double r216807 = r216806 * r216802;
double r216808 = r216802 * r216804;
double r216809 = r216804 * r216802;
double r216810 = r216808 + r216809;
double r216811 = r216810 * r216804;
double r216812 = r216807 - r216811;
return r216812;
}
double f(double x_re, double x_im) {
double r216813 = x_re;
double r216814 = 3.0;
double r216815 = pow(r216813, r216814);
double r216816 = x_im;
double r216817 = r216816 * r216814;
double r216818 = r216813 * r216816;
double r216819 = r216817 * r216818;
double r216820 = r216815 - r216819;
return r216820;
}




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
rmApplied associate-*r*0.2
rmApplied associate-*r*0.2
Simplified0.2
rmApplied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2019326
(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)))