\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.300179201415138562389146100214075083549 \cdot 10^{53}:\\
\;\;\;\;-\frac{x.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.im \cdot y.im + y.re \cdot y.re}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r51852 = x_re;
double r51853 = y_re;
double r51854 = r51852 * r51853;
double r51855 = x_im;
double r51856 = y_im;
double r51857 = r51855 * r51856;
double r51858 = r51854 + r51857;
double r51859 = r51853 * r51853;
double r51860 = r51856 * r51856;
double r51861 = r51859 + r51860;
double r51862 = r51858 / r51861;
return r51862;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r51863 = y_im;
double r51864 = -1.3001792014151386e+53;
bool r51865 = r51863 <= r51864;
double r51866 = x_im;
double r51867 = r51863 * r51863;
double r51868 = y_re;
double r51869 = r51868 * r51868;
double r51870 = r51867 + r51869;
double r51871 = sqrt(r51870);
double r51872 = r51866 / r51871;
double r51873 = -r51872;
double r51874 = x_re;
double r51875 = r51874 * r51868;
double r51876 = r51866 * r51863;
double r51877 = r51875 + r51876;
double r51878 = r51877 / r51870;
double r51879 = r51865 ? r51873 : r51878;
return r51879;
}



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.3001792014151386e+53Initial program 35.6
rmApplied add-sqr-sqrt35.6
Applied associate-/r*35.6
Simplified35.6
Taylor expanded around -inf 36.7
Simplified36.7
if -1.3001792014151386e+53 < y.im Initial program 23.1
rmApplied add-sqr-sqrt23.1
Applied associate-/r*23.1
Simplified23.1
rmApplied div-inv23.1
Applied associate-/l*23.2
Simplified23.1
Final simplification26.0
herbie shell --seed 2019194
(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))))