\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\begin{array}{l}
\mathbf{if}\;x.re \le 2.96629785101132302 \cdot 10^{277}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \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{-1 \cdot x.re}{\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 r66882 = x_im;
double r66883 = y_re;
double r66884 = r66882 * r66883;
double r66885 = x_re;
double r66886 = y_im;
double r66887 = r66885 * r66886;
double r66888 = r66884 - r66887;
double r66889 = r66883 * r66883;
double r66890 = r66886 * r66886;
double r66891 = r66889 + r66890;
double r66892 = r66888 / r66891;
return r66892;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r66893 = x_re;
double r66894 = 2.966297851011323e+277;
bool r66895 = r66893 <= r66894;
double r66896 = x_im;
double r66897 = y_re;
double r66898 = r66896 * r66897;
double r66899 = y_im;
double r66900 = r66893 * r66899;
double r66901 = r66898 - r66900;
double r66902 = r66897 * r66897;
double r66903 = r66899 * r66899;
double r66904 = r66902 + r66903;
double r66905 = sqrt(r66904);
double r66906 = r66901 / r66905;
double r66907 = r66906 / r66905;
double r66908 = -1.0;
double r66909 = r66908 * r66893;
double r66910 = r66909 / r66905;
double r66911 = r66895 ? r66907 : r66910;
return r66911;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.re < 2.966297851011323e+277Initial program 26.3
rmApplied add-sqr-sqrt26.3
Applied associate-/r*26.2
if 2.966297851011323e+277 < x.re Initial program 44.5
rmApplied add-sqr-sqrt44.5
Applied associate-/r*44.5
Taylor expanded around 0 51.6
Final simplification26.8
herbie shell --seed 2020046
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, imaginary part"
:precision binary64
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))