\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 r3050845 = x_re;
double r3050846 = y_re;
double r3050847 = r3050845 * r3050846;
double r3050848 = x_im;
double r3050849 = y_im;
double r3050850 = r3050848 * r3050849;
double r3050851 = r3050847 + r3050850;
double r3050852 = r3050846 * r3050846;
double r3050853 = r3050849 * r3050849;
double r3050854 = r3050852 + r3050853;
double r3050855 = r3050851 / r3050854;
return r3050855;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r3050856 = 1.0;
double r3050857 = y_re;
double r3050858 = r3050857 * r3050857;
double r3050859 = y_im;
double r3050860 = r3050859 * r3050859;
double r3050861 = r3050858 + r3050860;
double r3050862 = sqrt(r3050861);
double r3050863 = r3050856 / r3050862;
double r3050864 = x_im;
double r3050865 = r3050864 * r3050859;
double r3050866 = x_re;
double r3050867 = r3050866 * r3050857;
double r3050868 = r3050865 + r3050867;
double r3050869 = r3050863 * r3050868;
double r3050870 = r3050869 / r3050862;
return r3050870;
}



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))))