\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{\left(x.re \cdot y.re + x.im \cdot y.im\right) \cdot \frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\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 r43887 = x_re;
double r43888 = y_re;
double r43889 = r43887 * r43888;
double r43890 = x_im;
double r43891 = y_im;
double r43892 = r43890 * r43891;
double r43893 = r43889 + r43892;
double r43894 = r43888 * r43888;
double r43895 = r43891 * r43891;
double r43896 = r43894 + r43895;
double r43897 = r43893 / r43896;
return r43897;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r43898 = x_re;
double r43899 = y_re;
double r43900 = r43898 * r43899;
double r43901 = x_im;
double r43902 = y_im;
double r43903 = r43901 * r43902;
double r43904 = r43900 + r43903;
double r43905 = 1.0;
double r43906 = r43899 * r43899;
double r43907 = r43902 * r43902;
double r43908 = r43906 + r43907;
double r43909 = sqrt(r43908);
double r43910 = r43905 / r43909;
double r43911 = r43904 * r43910;
double r43912 = r43911 / r43909;
return r43912;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 25.9
rmApplied add-sqr-sqrt25.9
Applied associate-/r*25.8
rmApplied div-inv25.9
Final simplification25.9
herbie shell --seed 2019353
(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))))