\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.im \cdot x.re\right)\right)double f(double x_re, double x_im) {
double r128809 = x_re;
double r128810 = r128809 * r128809;
double r128811 = x_im;
double r128812 = r128811 * r128811;
double r128813 = r128810 - r128812;
double r128814 = r128813 * r128809;
double r128815 = r128809 * r128811;
double r128816 = r128811 * r128809;
double r128817 = r128815 + r128816;
double r128818 = r128817 * r128811;
double r128819 = r128814 - r128818;
return r128819;
}
double f(double x_re, double x_im) {
double r128820 = x_re;
double r128821 = 3.0;
double r128822 = pow(r128820, r128821);
double r128823 = x_im;
double r128824 = r128823 * r128820;
double r128825 = r128823 * r128824;
double r128826 = r128821 * r128825;
double r128827 = r128822 - r128826;
return r128827;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 7.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2019195
(FPCore (x.re x.im)
:name "math.cube on complex, real part"
:herbie-target
(+ (* (* x.re x.re) (- x.re x.im)) (* (* x.re x.im) (- x.re (* 3.0 x.im))))
(- (* (- (* x.re x.re) (* x.im x.im)) x.re) (* (+ (* x.re x.im) (* x.im x.re)) x.im)))