\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
3 \cdot \left(\left(x.im \cdot x.re\right) \cdot x.re\right) - {x.im}^{3}double f(double x_re, double x_im) {
double r184384 = x_re;
double r184385 = r184384 * r184384;
double r184386 = x_im;
double r184387 = r184386 * r184386;
double r184388 = r184385 - r184387;
double r184389 = r184388 * r184386;
double r184390 = r184384 * r184386;
double r184391 = r184386 * r184384;
double r184392 = r184390 + r184391;
double r184393 = r184392 * r184384;
double r184394 = r184389 + r184393;
return r184394;
}
double f(double x_re, double x_im) {
double r184395 = 3.0;
double r184396 = x_im;
double r184397 = x_re;
double r184398 = r184396 * r184397;
double r184399 = r184398 * r184397;
double r184400 = r184395 * r184399;
double r184401 = pow(r184396, r184395);
double r184402 = r184400 - r184401;
return r184402;
}




Bits error versus x.re




Bits error versus x.im
Results
| Original | 7.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 7.3
Simplified7.3
rmApplied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2020047
(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)))