\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.134035007520884449694704605899913336371 \cdot 10^{278}:\\
\;\;\;\;\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{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot x.re\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r67396 = x_re;
double r67397 = y_re;
double r67398 = r67396 * r67397;
double r67399 = x_im;
double r67400 = y_im;
double r67401 = r67399 * r67400;
double r67402 = r67398 + r67401;
double r67403 = r67397 * r67397;
double r67404 = r67400 * r67400;
double r67405 = r67403 + r67404;
double r67406 = r67402 / r67405;
return r67406;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r67407 = x_re;
double r67408 = y_re;
double r67409 = r67407 * r67408;
double r67410 = x_im;
double r67411 = y_im;
double r67412 = r67410 * r67411;
double r67413 = r67409 + r67412;
double r67414 = r67408 * r67408;
double r67415 = r67411 * r67411;
double r67416 = r67414 + r67415;
double r67417 = r67413 / r67416;
double r67418 = 1.1340350075208844e+278;
bool r67419 = r67417 <= r67418;
double r67420 = sqrt(r67416);
double r67421 = r67413 / r67420;
double r67422 = r67421 / r67420;
double r67423 = 1.0;
double r67424 = r67423 / r67420;
double r67425 = r67424 * r67407;
double r67426 = r67419 ? r67422 : r67425;
return r67426;
}



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.1340350075208844e+278Initial program 13.5
rmApplied add-sqr-sqrt13.5
Applied associate-/r*13.4
if 1.1340350075208844e+278 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 62.4
rmApplied add-sqr-sqrt62.4
Applied *-un-lft-identity62.4
Applied times-frac62.4
Taylor expanded around inf 60.0
Final simplification24.7
herbie shell --seed 2019352
(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))))