\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
\mathsf{fma}\left(-x.im, x.re \cdot x.im + x.re \cdot x.im, x.im \cdot \left(x.re \cdot x.im + x.re \cdot x.im\right)\right) + \mathsf{fma}\left(x.im + x.re, \left(x.re - x.im\right) \cdot x.re, \left(-x.im\right) \cdot \left(x.re \cdot x.im + x.re \cdot x.im\right)\right)double f(double x_re, double x_im) {
double r7540482 = x_re;
double r7540483 = r7540482 * r7540482;
double r7540484 = x_im;
double r7540485 = r7540484 * r7540484;
double r7540486 = r7540483 - r7540485;
double r7540487 = r7540486 * r7540482;
double r7540488 = r7540482 * r7540484;
double r7540489 = r7540484 * r7540482;
double r7540490 = r7540488 + r7540489;
double r7540491 = r7540490 * r7540484;
double r7540492 = r7540487 - r7540491;
return r7540492;
}
double f(double x_re, double x_im) {
double r7540493 = x_im;
double r7540494 = -r7540493;
double r7540495 = x_re;
double r7540496 = r7540495 * r7540493;
double r7540497 = r7540496 + r7540496;
double r7540498 = r7540493 * r7540497;
double r7540499 = fma(r7540494, r7540497, r7540498);
double r7540500 = r7540493 + r7540495;
double r7540501 = r7540495 - r7540493;
double r7540502 = r7540501 * r7540495;
double r7540503 = r7540494 * r7540497;
double r7540504 = fma(r7540500, r7540502, r7540503);
double r7540505 = r7540499 + r7540504;
return r7540505;
}




Bits error versus x.re




Bits error versus x.im
| Original | 7.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 7.1
rmApplied difference-of-squares7.1
Applied associate-*l*0.2
rmApplied prod-diff0.2
Final simplification0.2
herbie shell --seed 2019134 +o rules:numerics
(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)))