\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
\left(\left(x.re - x.im\right) \cdot x.re\right) \cdot \left(x.im + x.re\right) - \left(x.re \cdot x.im + x.re \cdot x.im\right) \cdot x.im
double f(double x_re, double x_im) {
double r103922 = x_re;
double r103923 = r103922 * r103922;
double r103924 = x_im;
double r103925 = r103924 * r103924;
double r103926 = r103923 - r103925;
double r103927 = r103926 * r103922;
double r103928 = r103922 * r103924;
double r103929 = r103924 * r103922;
double r103930 = r103928 + r103929;
double r103931 = r103930 * r103924;
double r103932 = r103927 - r103931;
return r103932;
}
double f(double x_re, double x_im) {
double r103933 = x_re;
double r103934 = x_im;
double r103935 = r103933 - r103934;
double r103936 = r103935 * r103933;
double r103937 = r103934 + r103933;
double r103938 = r103936 * r103937;
double r103939 = r103933 * r103934;
double r103940 = r103939 + r103939;
double r103941 = r103940 * r103934;
double r103942 = r103938 - r103941;
return r103942;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 6.8 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
Initial program 6.8
rmApplied difference-of-squares6.8
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2019194
(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)))