\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}\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 1.125315539437018287343450480014902782958 \cdot 10^{293}:\\
\;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{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 r118882 = x_re;
double r118883 = y_re;
double r118884 = r118882 * r118883;
double r118885 = x_im;
double r118886 = y_im;
double r118887 = r118885 * r118886;
double r118888 = r118884 + r118887;
double r118889 = r118883 * r118883;
double r118890 = r118886 * r118886;
double r118891 = r118889 + r118890;
double r118892 = r118888 / r118891;
return r118892;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r118893 = x_re;
double r118894 = y_re;
double r118895 = r118893 * r118894;
double r118896 = x_im;
double r118897 = y_im;
double r118898 = r118896 * r118897;
double r118899 = r118895 + r118898;
double r118900 = r118894 * r118894;
double r118901 = r118897 * r118897;
double r118902 = r118900 + r118901;
double r118903 = r118899 / r118902;
double r118904 = 1.1253155394370183e+293;
bool r118905 = r118903 <= r118904;
double r118906 = sqrt(r118902);
double r118907 = r118896 / r118906;
double r118908 = r118905 ? r118903 : r118907;
return r118908;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) < 1.1253155394370183e+293Initial program 14.3
if 1.1253155394370183e+293 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.1
rmApplied add-sqr-sqrt63.1
Applied associate-/r*63.1
Taylor expanded around 0 60.2
Final simplification25.6
herbie shell --seed 2019351
(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))))