\left(re \cdot re\right) - \left(im \cdot im\right)
\left(re - im\right) \cdot \left(im + re\right)
double f(double re, double im) {
double r303706 = re;
double r303707 = r303706 * r303706;
double r303708 = im;
double r303709 = r303708 * r303708;
double r303710 = r303707 - r303709;
return r303710;
}
double f(double re, double im) {
double r303711 = re;
double r303712 = im;
double r303713 = r303711 - r303712;
double r303714 = r303712 + r303711;
double r303715 = r303713 * r303714;
return r303715;
}



Bits error versus re



Bits error versus im
Initial program 0.3
Simplified0.1
Final simplification0.1
herbie shell --seed 2019125 +o rules:numerics
(FPCore (re im)
:name "math.square on complex, real part"
(-.p16 (*.p16 re re) (*.p16 im im)))