\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.im \le 4.6443275942179823 \cdot 10^{184}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1 \cdot x.re}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r49484 = x_im;
double r49485 = y_re;
double r49486 = r49484 * r49485;
double r49487 = x_re;
double r49488 = y_im;
double r49489 = r49487 * r49488;
double r49490 = r49486 - r49489;
double r49491 = r49485 * r49485;
double r49492 = r49488 * r49488;
double r49493 = r49491 + r49492;
double r49494 = r49490 / r49493;
return r49494;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r49495 = y_im;
double r49496 = 4.644327594217982e+184;
bool r49497 = r49495 <= r49496;
double r49498 = x_im;
double r49499 = y_re;
double r49500 = r49498 * r49499;
double r49501 = x_re;
double r49502 = r49501 * r49495;
double r49503 = r49500 - r49502;
double r49504 = hypot(r49499, r49495);
double r49505 = r49503 / r49504;
double r49506 = 1.0;
double r49507 = r49504 * r49506;
double r49508 = r49505 / r49507;
double r49509 = -1.0;
double r49510 = r49509 * r49501;
double r49511 = r49510 / r49507;
double r49512 = r49497 ? r49508 : r49511;
return r49512;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < 4.644327594217982e+184Initial program 23.7
rmApplied add-sqr-sqrt23.7
Applied *-un-lft-identity23.7
Applied times-frac23.7
Simplified23.7
Simplified15.5
rmApplied associate-*l/15.4
Simplified15.4
if 4.644327594217982e+184 < y.im Initial program 44.6
rmApplied add-sqr-sqrt44.6
Applied *-un-lft-identity44.6
Applied times-frac44.6
Simplified44.6
Simplified31.6
rmApplied associate-*l/31.6
Simplified31.6
Taylor expanded around 0 10.9
Final simplification14.9
herbie shell --seed 2020036 +o rules:numerics
(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))))