\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(\left(x.re \cdot 3\right) \cdot \left(x.im \cdot x.re\right)\right)}^{1} - {x.im}^{3}double f(double x_re, double x_im) {
double r167393 = x_re;
double r167394 = r167393 * r167393;
double r167395 = x_im;
double r167396 = r167395 * r167395;
double r167397 = r167394 - r167396;
double r167398 = r167397 * r167395;
double r167399 = r167393 * r167395;
double r167400 = r167395 * r167393;
double r167401 = r167399 + r167400;
double r167402 = r167401 * r167393;
double r167403 = r167398 + r167402;
return r167403;
}
double f(double x_re, double x_im) {
double r167404 = x_re;
double r167405 = 3.0;
double r167406 = r167404 * r167405;
double r167407 = x_im;
double r167408 = r167407 * r167404;
double r167409 = r167406 * r167408;
double r167410 = 1.0;
double r167411 = pow(r167409, r167410);
double r167412 = pow(r167407, r167405);
double r167413 = r167411 - r167412;
return r167413;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 7.4
Simplified7.4
rmApplied associate-*r*0.2
rmApplied associate-*r*0.2
rmApplied add-cube-cbrt0.2
Applied associate-*l*0.3
rmApplied pow10.3
Applied pow10.3
Applied pow10.3
Applied pow-prod-down0.3
Applied pow10.3
Applied pow-prod-down0.3
Applied pow10.3
Applied pow10.3
Applied pow-prod-down0.3
Applied pow-prod-down0.3
Applied pow-prod-down0.3
Simplified0.2
Final simplification0.2
herbie shell --seed 2020060
(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)))