re \cdot re - im \cdot im
\left(im + \left(-im\right)\right) \cdot im + \left(im + re\right) \cdot \left(re - im\right)
double f(double re, double im) {
double r9504 = re;
double r9505 = r9504 * r9504;
double r9506 = im;
double r9507 = r9506 * r9506;
double r9508 = r9505 - r9507;
return r9508;
}
double f(double re, double im) {
double r9509 = im;
double r9510 = -r9509;
double r9511 = r9509 + r9510;
double r9512 = r9511 * r9509;
double r9513 = re;
double r9514 = r9509 + r9513;
double r9515 = r9513 - r9509;
double r9516 = r9514 * r9515;
double r9517 = r9512 + r9516;
return r9517;
}



Bits error versus re



Bits error versus im
Results
Initial program 0.0
rmApplied prod-diff0.0
Simplified0.0
Simplified0.0
Final simplification0.0
herbie shell --seed 2019179 +o rules:numerics
(FPCore (re im)
:name "math.square on complex, real part"
(- (* re re) (* im im)))