\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(x.re + x.im\right) \cdot \left(\left(x.re - x.im\right) \cdot x.im\right) + \left(x.re \cdot x.im + x.im \cdot x.re\right) \cdot x.re
double f(double x_re, double x_im) {
double r179288 = x_re;
double r179289 = r179288 * r179288;
double r179290 = x_im;
double r179291 = r179290 * r179290;
double r179292 = r179289 - r179291;
double r179293 = r179292 * r179290;
double r179294 = r179288 * r179290;
double r179295 = r179290 * r179288;
double r179296 = r179294 + r179295;
double r179297 = r179296 * r179288;
double r179298 = r179293 + r179297;
return r179298;
}
double f(double x_re, double x_im) {
double r179299 = x_re;
double r179300 = x_im;
double r179301 = r179299 + r179300;
double r179302 = r179299 - r179300;
double r179303 = r179302 * r179300;
double r179304 = r179301 * r179303;
double r179305 = r179299 * r179300;
double r179306 = r179300 * r179299;
double r179307 = r179305 + r179306;
double r179308 = r179307 * r179299;
double r179309 = r179304 + r179308;
return r179309;
}




Bits error versus x.re




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