\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\begin{array}{l}
\mathbf{if}\;y.im \le 1.6421156666632428 \cdot 10^{+125}:\\
\;\;\;\;\frac{x.re \cdot y.re + y.im \cdot x.im}{y.im \cdot y.im + y.re \cdot y.re}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r2806143 = x_re;
double r2806144 = y_re;
double r2806145 = r2806143 * r2806144;
double r2806146 = x_im;
double r2806147 = y_im;
double r2806148 = r2806146 * r2806147;
double r2806149 = r2806145 + r2806148;
double r2806150 = r2806144 * r2806144;
double r2806151 = r2806147 * r2806147;
double r2806152 = r2806150 + r2806151;
double r2806153 = r2806149 / r2806152;
return r2806153;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r2806154 = y_im;
double r2806155 = 1.6421156666632428e+125;
bool r2806156 = r2806154 <= r2806155;
double r2806157 = x_re;
double r2806158 = y_re;
double r2806159 = r2806157 * r2806158;
double r2806160 = x_im;
double r2806161 = r2806154 * r2806160;
double r2806162 = r2806159 + r2806161;
double r2806163 = r2806154 * r2806154;
double r2806164 = r2806158 * r2806158;
double r2806165 = r2806163 + r2806164;
double r2806166 = r2806162 / r2806165;
double r2806167 = sqrt(r2806165);
double r2806168 = r2806160 / r2806167;
double r2806169 = r2806156 ? r2806166 : r2806168;
return r2806169;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < 1.6421156666632428e+125Initial program 22.6
if 1.6421156666632428e+125 < y.im Initial program 39.4
rmApplied add-sqr-sqrt39.4
Applied associate-/r*39.4
Taylor expanded around 0 38.7
Final simplification25.1
herbie shell --seed 2019134
(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))))