\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)}{\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 r2957887 = x_re;
double r2957888 = y_re;
double r2957889 = r2957887 * r2957888;
double r2957890 = x_im;
double r2957891 = y_im;
double r2957892 = r2957890 * r2957891;
double r2957893 = r2957889 + r2957892;
double r2957894 = r2957888 * r2957888;
double r2957895 = r2957891 * r2957891;
double r2957896 = r2957894 + r2957895;
double r2957897 = r2957893 / r2957896;
return r2957897;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r2957898 = 1.0;
double r2957899 = y_re;
double r2957900 = r2957899 * r2957899;
double r2957901 = y_im;
double r2957902 = r2957901 * r2957901;
double r2957903 = r2957900 + r2957902;
double r2957904 = sqrt(r2957903);
double r2957905 = r2957898 / r2957904;
double r2957906 = x_im;
double r2957907 = r2957906 * r2957901;
double r2957908 = x_re;
double r2957909 = r2957908 * r2957899;
double r2957910 = r2957907 + r2957909;
double r2957911 = r2957905 * r2957910;
double r2957912 = r2957911 / r2957904;
return r2957912;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 25.8
rmApplied add-sqr-sqrt25.8
Applied associate-/r*25.7
rmApplied div-inv25.8
Final simplification25.8
herbie shell --seed 2019163
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, real part"
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))