\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 7.1986768583136221 \cdot 10^{111}:\\
\;\;\;\;1 \cdot \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)}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \frac{-1 \cdot x.re}{\mathsf{hypot}\left(y.re, y.im\right)}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r107503 = x_im;
double r107504 = y_re;
double r107505 = r107503 * r107504;
double r107506 = x_re;
double r107507 = y_im;
double r107508 = r107506 * r107507;
double r107509 = r107505 - r107508;
double r107510 = r107504 * r107504;
double r107511 = r107507 * r107507;
double r107512 = r107510 + r107511;
double r107513 = r107509 / r107512;
return r107513;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r107514 = y_im;
double r107515 = 7.198676858313622e+111;
bool r107516 = r107514 <= r107515;
double r107517 = 1.0;
double r107518 = x_im;
double r107519 = y_re;
double r107520 = r107518 * r107519;
double r107521 = x_re;
double r107522 = r107521 * r107514;
double r107523 = r107520 - r107522;
double r107524 = hypot(r107519, r107514);
double r107525 = r107523 / r107524;
double r107526 = r107525 / r107524;
double r107527 = r107517 * r107526;
double r107528 = -1.0;
double r107529 = r107528 * r107521;
double r107530 = r107529 / r107524;
double r107531 = r107517 * r107530;
double r107532 = r107516 ? r107527 : r107531;
return r107532;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < 7.198676858313622e+111Initial program 23.1
rmApplied add-sqr-sqrt23.1
Applied *-un-lft-identity23.1
Applied times-frac23.1
Simplified23.1
Simplified14.6
rmApplied *-un-lft-identity14.6
Applied associate-*l*14.6
Simplified14.5
if 7.198676858313622e+111 < y.im Initial program 40.7
rmApplied add-sqr-sqrt40.7
Applied *-un-lft-identity40.7
Applied times-frac40.7
Simplified40.7
Simplified26.9
rmApplied *-un-lft-identity26.9
Applied associate-*l*26.9
Simplified26.8
Taylor expanded around 0 15.4
Final simplification14.6
herbie shell --seed 2020027 +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))))