\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 r85475 = x_im;
double r85476 = y_re;
double r85477 = r85475 * r85476;
double r85478 = x_re;
double r85479 = y_im;
double r85480 = r85478 * r85479;
double r85481 = r85477 - r85480;
double r85482 = r85476 * r85476;
double r85483 = r85479 * r85479;
double r85484 = r85482 + r85483;
double r85485 = r85481 / r85484;
return r85485;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r85486 = x_im;
double r85487 = y_re;
double r85488 = r85486 * r85487;
double r85489 = x_re;
double r85490 = y_im;
double r85491 = r85489 * r85490;
double r85492 = r85488 - r85491;
double r85493 = r85487 * r85487;
double r85494 = r85490 * r85490;
double r85495 = r85493 + r85494;
double r85496 = r85492 / r85495;
double r85497 = 6.918361099356831e+305;
bool r85498 = r85496 <= r85497;
double r85499 = sqrt(r85495);
double r85500 = r85486 / r85499;
double r85501 = r85498 ? r85496 : r85500;
return r85501;
}



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))))