\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}double f(double x_re, double x_im, double y_re, double y_im) {
double r60081 = x_re;
double r60082 = y_re;
double r60083 = r60081 * r60082;
double r60084 = x_im;
double r60085 = y_im;
double r60086 = r60084 * r60085;
double r60087 = r60083 + r60086;
double r60088 = r60082 * r60082;
double r60089 = r60085 * r60085;
double r60090 = r60088 + r60089;
double r60091 = r60087 / r60090;
return r60091;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r60092 = x_re;
double r60093 = y_re;
double r60094 = r60092 * r60093;
double r60095 = x_im;
double r60096 = y_im;
double r60097 = r60095 * r60096;
double r60098 = r60094 + r60097;
double r60099 = r60093 * r60093;
double r60100 = r60096 * r60096;
double r60101 = r60099 + r60100;
double r60102 = sqrt(r60101);
double r60103 = r60102 * r60102;
double r60104 = r60098 / r60103;
return r60104;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.4
rmApplied add-sqr-sqrt26.4
Final simplification26.4
herbie shell --seed 2020046
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, real part"
:precision binary64
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))