\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.034732446536267 \cdot 10^{50}:\\
\;\;\;\;\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 r65596 = x_re;
double r65597 = y_re;
double r65598 = r65596 * r65597;
double r65599 = x_im;
double r65600 = y_im;
double r65601 = r65599 * r65600;
double r65602 = r65598 + r65601;
double r65603 = r65597 * r65597;
double r65604 = r65600 * r65600;
double r65605 = r65603 + r65604;
double r65606 = r65602 / r65605;
return r65606;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r65607 = y_im;
double r65608 = 1.0347324465362668e+50;
bool r65609 = r65607 <= r65608;
double r65610 = x_re;
double r65611 = y_re;
double r65612 = r65610 * r65611;
double r65613 = x_im;
double r65614 = r65613 * r65607;
double r65615 = r65612 + r65614;
double r65616 = r65611 * r65611;
double r65617 = r65607 * r65607;
double r65618 = r65616 + r65617;
double r65619 = sqrt(r65618);
double r65620 = r65615 / r65619;
double r65621 = r65620 / r65619;
double r65622 = r65613 / r65619;
double r65623 = r65609 ? r65621 : r65622;
return r65623;
}



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.0347324465362668e+50Initial program 23.6
rmApplied add-sqr-sqrt23.6
Applied associate-/r*23.5
if 1.0347324465362668e+50 < y.im Initial program 36.0
rmApplied add-sqr-sqrt36.0
Applied associate-/r*36.0
Taylor expanded around 0 36.8
Final simplification26.5
herbie shell --seed 2019199
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, real part"
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))