\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}\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 1.80145861097624246 \cdot 10^{302}:\\
\;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r39150 = x_re;
double r39151 = y_re;
double r39152 = r39150 * r39151;
double r39153 = x_im;
double r39154 = y_im;
double r39155 = r39153 * r39154;
double r39156 = r39152 + r39155;
double r39157 = r39151 * r39151;
double r39158 = r39154 * r39154;
double r39159 = r39157 + r39158;
double r39160 = r39156 / r39159;
return r39160;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r39161 = x_re;
double r39162 = y_re;
double r39163 = r39161 * r39162;
double r39164 = x_im;
double r39165 = y_im;
double r39166 = r39164 * r39165;
double r39167 = r39163 + r39166;
double r39168 = r39162 * r39162;
double r39169 = r39165 * r39165;
double r39170 = r39168 + r39169;
double r39171 = r39167 / r39170;
double r39172 = 1.8014586109762425e+302;
bool r39173 = r39171 <= r39172;
double r39174 = sqrt(r39170);
double r39175 = r39161 / r39174;
double r39176 = r39173 ? r39171 : r39175;
return r39176;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) < 1.8014586109762425e+302Initial program 14.0
if 1.8014586109762425e+302 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.5
rmApplied add-sqr-sqrt63.5
Applied associate-/r*63.5
Taylor expanded around inf 60.0
Final simplification25.6
herbie shell --seed 2020018
(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))))