\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 r358841 = re;
double r358842 = r358841 * r358841;
double r358843 = im;
double r358844 = r358843 * r358843;
double r358845 = r358842 - r358844;
return r358845;
}
double f(double re, double im) {
double r358846 = re;
double r358847 = im;
double r358848 = r358846 - r358847;
double r358849 = r358847 + r358846;
double r358850 = r358848 * r358849;
return r358850;
}



Bits error versus re



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