\left(x.re \cdot x.re - x.im \cdot x.im\right) \cdot x.im + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re
\left(3 \cdot x.re\right) \cdot \left(x.im \cdot x.re\right) - {x.im}^{3}double f(double x_re, double x_im) {
double r143779 = x_re;
double r143780 = r143779 * r143779;
double r143781 = x_im;
double r143782 = r143781 * r143781;
double r143783 = r143780 - r143782;
double r143784 = r143783 * r143781;
double r143785 = r143779 * r143781;
double r143786 = r143781 * r143779;
double r143787 = r143785 + r143786;
double r143788 = r143787 * r143779;
double r143789 = r143784 + r143788;
return r143789;
}
double f(double x_re, double x_im) {
double r143790 = 3.0;
double r143791 = x_re;
double r143792 = r143790 * r143791;
double r143793 = x_im;
double r143794 = r143793 * r143791;
double r143795 = r143792 * r143794;
double r143796 = pow(r143793, r143790);
double r143797 = r143795 - r143796;
return r143797;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.6 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
Initial program 7.6
Simplified0.2
Final simplification0.2
herbie shell --seed 2019212
(FPCore (x.re x.im)
:name "math.cube on complex, imaginary part"
:precision binary64
:herbie-target
(+ (* (* x.re x.im) (* 2 x.re)) (* (* x.im (- x.re x.im)) (+ x.re x.im)))
(+ (* (- (* x.re x.re) (* x.im x.im)) x.im) (* (+ (* x.re x.im) (* x.im x.re)) x.re)))