\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 2.1823115562014438197246819202297797802 \cdot 10^{112}:\\
\;\;\;\;\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 r53864 = x_re;
double r53865 = y_re;
double r53866 = r53864 * r53865;
double r53867 = x_im;
double r53868 = y_im;
double r53869 = r53867 * r53868;
double r53870 = r53866 + r53869;
double r53871 = r53865 * r53865;
double r53872 = r53868 * r53868;
double r53873 = r53871 + r53872;
double r53874 = r53870 / r53873;
return r53874;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r53875 = y_im;
double r53876 = 2.182311556201444e+112;
bool r53877 = r53875 <= r53876;
double r53878 = x_re;
double r53879 = y_re;
double r53880 = r53878 * r53879;
double r53881 = x_im;
double r53882 = r53881 * r53875;
double r53883 = r53880 + r53882;
double r53884 = r53879 * r53879;
double r53885 = r53875 * r53875;
double r53886 = r53884 + r53885;
double r53887 = sqrt(r53886);
double r53888 = r53883 / r53887;
double r53889 = r53888 / r53887;
double r53890 = r53881 / r53887;
double r53891 = r53877 ? r53889 : r53890;
return r53891;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < 2.182311556201444e+112Initial program 23.5
rmApplied add-sqr-sqrt23.5
Applied associate-/r*23.4
if 2.182311556201444e+112 < y.im Initial program 40.7
rmApplied add-sqr-sqrt40.7
Applied associate-/r*40.7
Taylor expanded around 0 39.7
Final simplification26.1
herbie shell --seed 2020002
(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))))