\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.205157260915315763715079288223481241169 \cdot 10^{295}:\\
\;\;\;\;\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.im}{\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 r110415 = x_re;
double r110416 = y_re;
double r110417 = r110415 * r110416;
double r110418 = x_im;
double r110419 = y_im;
double r110420 = r110418 * r110419;
double r110421 = r110417 + r110420;
double r110422 = r110416 * r110416;
double r110423 = r110419 * r110419;
double r110424 = r110422 + r110423;
double r110425 = r110421 / r110424;
return r110425;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r110426 = x_re;
double r110427 = y_re;
double r110428 = r110426 * r110427;
double r110429 = x_im;
double r110430 = y_im;
double r110431 = r110429 * r110430;
double r110432 = r110428 + r110431;
double r110433 = r110427 * r110427;
double r110434 = r110430 * r110430;
double r110435 = r110433 + r110434;
double r110436 = r110432 / r110435;
double r110437 = 3.2051572609153158e+295;
bool r110438 = r110436 <= r110437;
double r110439 = sqrt(r110435);
double r110440 = r110432 / r110439;
double r110441 = r110440 / r110439;
double r110442 = r110429 / r110439;
double r110443 = r110438 ? r110441 : r110442;
return r110443;
}



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.2051572609153158e+295Initial program 13.9
rmApplied add-sqr-sqrt13.9
Applied associate-/r*13.8
if 3.2051572609153158e+295 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.2
rmApplied add-sqr-sqrt63.2
Applied associate-/r*63.2
Taylor expanded around 0 60.2
Final simplification25.1
herbie shell --seed 2019212
(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))))