\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}\;\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 3.0586257786179306 \cdot 10^{292}:\\
\;\;\;\;\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 r71984 = x_im;
double r71985 = y_re;
double r71986 = r71984 * r71985;
double r71987 = x_re;
double r71988 = y_im;
double r71989 = r71987 * r71988;
double r71990 = r71986 - r71989;
double r71991 = r71985 * r71985;
double r71992 = r71988 * r71988;
double r71993 = r71991 + r71992;
double r71994 = r71990 / r71993;
return r71994;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r71995 = x_im;
double r71996 = y_re;
double r71997 = r71995 * r71996;
double r71998 = x_re;
double r71999 = y_im;
double r72000 = r71998 * r71999;
double r72001 = r71997 - r72000;
double r72002 = r71996 * r71996;
double r72003 = r71999 * r71999;
double r72004 = r72002 + r72003;
double r72005 = r72001 / r72004;
double r72006 = 3.0586257786179306e+292;
bool r72007 = r72005 <= r72006;
double r72008 = sqrt(r72004);
double r72009 = r72001 / r72008;
double r72010 = r72009 / r72008;
double r72011 = r71995 / r72008;
double r72012 = r72007 ? r72010 : r72011;
return r72012;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < 3.0586257786179306e+292Initial program 13.9
rmApplied add-sqr-sqrt13.9
Applied associate-/r*13.8
if 3.0586257786179306e+292 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.0
rmApplied add-sqr-sqrt63.0
Applied associate-/r*63.0
Taylor expanded around inf 60.6
Final simplification25.2
herbie shell --seed 2019198
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, imaginary part"
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))