\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 6.918361099356831363837397929747071264075 \cdot 10^{305}:\\
\;\;\;\;\frac{x.im \cdot y.re - x.re \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 r45124 = x_im;
double r45125 = y_re;
double r45126 = r45124 * r45125;
double r45127 = x_re;
double r45128 = y_im;
double r45129 = r45127 * r45128;
double r45130 = r45126 - r45129;
double r45131 = r45125 * r45125;
double r45132 = r45128 * r45128;
double r45133 = r45131 + r45132;
double r45134 = r45130 / r45133;
return r45134;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r45135 = x_im;
double r45136 = y_re;
double r45137 = r45135 * r45136;
double r45138 = x_re;
double r45139 = y_im;
double r45140 = r45138 * r45139;
double r45141 = r45137 - r45140;
double r45142 = r45136 * r45136;
double r45143 = r45139 * r45139;
double r45144 = r45142 + r45143;
double r45145 = r45141 / r45144;
double r45146 = 6.918361099356831e+305;
bool r45147 = r45145 <= r45146;
double r45148 = sqrt(r45144);
double r45149 = r45135 / r45148;
double r45150 = r45147 ? r45145 : r45149;
return r45150;
}



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))) < 6.918361099356831e+305Initial program 13.9
if 6.918361099356831e+305 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 64.0
rmApplied add-sqr-sqrt64.0
Applied associate-/r*64.0
Taylor expanded around inf 60.6
Final simplification25.3
herbie shell --seed 2019304
(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))))