\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 r8221047 = x_re;
double r8221048 = r8221047 * r8221047;
double r8221049 = x_im;
double r8221050 = r8221049 * r8221049;
double r8221051 = r8221048 - r8221050;
double r8221052 = r8221051 * r8221047;
double r8221053 = r8221047 * r8221049;
double r8221054 = r8221049 * r8221047;
double r8221055 = r8221053 + r8221054;
double r8221056 = r8221055 * r8221049;
double r8221057 = r8221052 - r8221056;
return r8221057;
}
double f(double x_re, double x_im) {
double r8221058 = x_re;
double r8221059 = x_im;
double r8221060 = r8221058 - r8221059;
double r8221061 = r8221060 * r8221058;
double r8221062 = r8221059 + r8221058;
double r8221063 = r8221061 * r8221062;
double r8221064 = r8221058 * r8221059;
double r8221065 = r8221064 + r8221064;
double r8221066 = r8221065 * r8221059;
double r8221067 = r8221063 - r8221066;
return r8221067;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 7.0
rmApplied difference-of-squares7.0
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2019132
(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 x.im))))
(- (* (- (* x.re x.re) (* x.im x.im)) x.re) (* (+ (* x.re x.im) (* x.im x.re)) x.im)))