\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 3.37555360408531301 \cdot 10^{294}:\\
\;\;\;\;\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 r46156 = x_re;
double r46157 = y_re;
double r46158 = r46156 * r46157;
double r46159 = x_im;
double r46160 = y_im;
double r46161 = r46159 * r46160;
double r46162 = r46158 + r46161;
double r46163 = r46157 * r46157;
double r46164 = r46160 * r46160;
double r46165 = r46163 + r46164;
double r46166 = r46162 / r46165;
return r46166;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r46167 = x_re;
double r46168 = y_re;
double r46169 = r46167 * r46168;
double r46170 = x_im;
double r46171 = y_im;
double r46172 = r46170 * r46171;
double r46173 = r46169 + r46172;
double r46174 = r46168 * r46168;
double r46175 = r46171 * r46171;
double r46176 = r46174 + r46175;
double r46177 = r46173 / r46176;
double r46178 = 3.375553604085313e+294;
bool r46179 = r46177 <= r46178;
double r46180 = sqrt(r46176);
double r46181 = r46167 / r46180;
double r46182 = r46179 ? r46177 : r46181;
return r46182;
}



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))) < 3.375553604085313e+294Initial program 14.2
if 3.375553604085313e+294 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.1
rmApplied add-sqr-sqrt63.1
Applied associate-/r*63.1
Taylor expanded around inf 60.3
Final simplification25.4
herbie shell --seed 2020039
(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))))