\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}\;y.im \le 1.022096285157088796449452448047526613473 \cdot 10^{92}:\\
\;\;\;\;\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 r66585 = x_re;
double r66586 = y_re;
double r66587 = r66585 * r66586;
double r66588 = x_im;
double r66589 = y_im;
double r66590 = r66588 * r66589;
double r66591 = r66587 + r66590;
double r66592 = r66586 * r66586;
double r66593 = r66589 * r66589;
double r66594 = r66592 + r66593;
double r66595 = r66591 / r66594;
return r66595;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r66596 = y_im;
double r66597 = 1.0220962851570888e+92;
bool r66598 = r66596 <= r66597;
double r66599 = x_re;
double r66600 = y_re;
double r66601 = r66599 * r66600;
double r66602 = x_im;
double r66603 = r66602 * r66596;
double r66604 = r66601 + r66603;
double r66605 = r66600 * r66600;
double r66606 = r66596 * r66596;
double r66607 = r66605 + r66606;
double r66608 = sqrt(r66607);
double r66609 = r66604 / r66608;
double r66610 = r66609 / r66608;
double r66611 = r66602 / r66608;
double r66612 = r66598 ? r66610 : r66611;
return r66612;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < 1.0220962851570888e+92Initial program 23.9
rmApplied add-sqr-sqrt23.9
Applied associate-/r*23.8
if 1.0220962851570888e+92 < y.im Initial program 39.6
rmApplied add-sqr-sqrt39.6
Applied associate-/r*39.6
Taylor expanded around 0 39.1
Final simplification26.6
herbie shell --seed 2019347
(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))))