\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}\;y.re \le 3.74842986632685600906042104748652145254 \cdot 10^{86}:\\
\;\;\;\;\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{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 r51920 = x_im;
double r51921 = y_re;
double r51922 = r51920 * r51921;
double r51923 = x_re;
double r51924 = y_im;
double r51925 = r51923 * r51924;
double r51926 = r51922 - r51925;
double r51927 = r51921 * r51921;
double r51928 = r51924 * r51924;
double r51929 = r51927 + r51928;
double r51930 = r51926 / r51929;
return r51930;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r51931 = y_re;
double r51932 = 3.748429866326856e+86;
bool r51933 = r51931 <= r51932;
double r51934 = x_im;
double r51935 = r51934 * r51931;
double r51936 = x_re;
double r51937 = y_im;
double r51938 = r51936 * r51937;
double r51939 = r51935 - r51938;
double r51940 = r51931 * r51931;
double r51941 = r51937 * r51937;
double r51942 = r51940 + r51941;
double r51943 = sqrt(r51942);
double r51944 = r51939 / r51943;
double r51945 = r51944 / r51943;
double r51946 = r51934 / r51943;
double r51947 = r51933 ? r51945 : r51946;
return r51947;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < 3.748429866326856e+86Initial program 22.7
rmApplied add-sqr-sqrt22.7
Applied associate-/r*22.6
if 3.748429866326856e+86 < y.re Initial program 39.8
rmApplied add-sqr-sqrt39.8
Applied associate-/r*39.7
Taylor expanded around inf 38.9
Final simplification25.8
herbie shell --seed 2019362
(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))))