\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.184813700156011083109181895909360357652 \cdot 10^{305}:\\
\;\;\;\;\frac{\frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{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 r60101 = x_re;
double r60102 = y_re;
double r60103 = r60101 * r60102;
double r60104 = x_im;
double r60105 = y_im;
double r60106 = r60104 * r60105;
double r60107 = r60103 + r60106;
double r60108 = r60102 * r60102;
double r60109 = r60105 * r60105;
double r60110 = r60108 + r60109;
double r60111 = r60107 / r60110;
return r60111;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r60112 = x_re;
double r60113 = y_re;
double r60114 = r60112 * r60113;
double r60115 = x_im;
double r60116 = y_im;
double r60117 = r60115 * r60116;
double r60118 = r60114 + r60117;
double r60119 = r60113 * r60113;
double r60120 = r60116 * r60116;
double r60121 = r60119 + r60120;
double r60122 = r60118 / r60121;
double r60123 = 1.184813700156011e+305;
bool r60124 = r60122 <= r60123;
double r60125 = sqrt(r60121);
double r60126 = r60118 / r60125;
double r60127 = r60126 / r60125;
double r60128 = r60112 / r60125;
double r60129 = r60124 ? r60127 : r60128;
return r60129;
}



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.184813700156011e+305Initial program 14.1
rmApplied add-sqr-sqrt14.1
Applied associate-/r*14.0
if 1.184813700156011e+305 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.9
rmApplied add-sqr-sqrt63.9
Applied associate-/r*63.9
Taylor expanded around inf 60.5
Final simplification25.1
herbie shell --seed 2019362
(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))))