\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.26556292468671579 \cdot 10^{88}:\\
\;\;\;\;\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 r44807 = x_re;
double r44808 = y_re;
double r44809 = r44807 * r44808;
double r44810 = x_im;
double r44811 = y_im;
double r44812 = r44810 * r44811;
double r44813 = r44809 + r44812;
double r44814 = r44808 * r44808;
double r44815 = r44811 * r44811;
double r44816 = r44814 + r44815;
double r44817 = r44813 / r44816;
return r44817;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r44818 = y_im;
double r44819 = 1.2655629246867158e+88;
bool r44820 = r44818 <= r44819;
double r44821 = x_re;
double r44822 = y_re;
double r44823 = r44821 * r44822;
double r44824 = x_im;
double r44825 = r44824 * r44818;
double r44826 = r44823 + r44825;
double r44827 = r44822 * r44822;
double r44828 = r44818 * r44818;
double r44829 = r44827 + r44828;
double r44830 = sqrt(r44829);
double r44831 = r44826 / r44830;
double r44832 = r44831 / r44830;
double r44833 = r44824 / r44830;
double r44834 = r44820 ? r44832 : r44833;
return r44834;
}



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.2655629246867158e+88Initial program 22.9
rmApplied add-sqr-sqrt22.9
Applied associate-/r*22.8
if 1.2655629246867158e+88 < y.im Initial program 38.6
rmApplied add-sqr-sqrt38.6
Applied associate-/r*38.6
Taylor expanded around 0 38.0
Final simplification25.7
herbie shell --seed 2019195
(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))))