\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 1.040801148335406884298745436678592487814 \cdot 10^{55}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - y.im \cdot x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r3192654 = x_im;
double r3192655 = y_re;
double r3192656 = r3192654 * r3192655;
double r3192657 = x_re;
double r3192658 = y_im;
double r3192659 = r3192657 * r3192658;
double r3192660 = r3192656 - r3192659;
double r3192661 = r3192655 * r3192655;
double r3192662 = r3192658 * r3192658;
double r3192663 = r3192661 + r3192662;
double r3192664 = r3192660 / r3192663;
return r3192664;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r3192665 = y_im;
double r3192666 = 1.0408011483354069e+55;
bool r3192667 = r3192665 <= r3192666;
double r3192668 = x_im;
double r3192669 = y_re;
double r3192670 = r3192668 * r3192669;
double r3192671 = x_re;
double r3192672 = r3192665 * r3192671;
double r3192673 = r3192670 - r3192672;
double r3192674 = r3192665 * r3192665;
double r3192675 = r3192669 * r3192669;
double r3192676 = r3192674 + r3192675;
double r3192677 = sqrt(r3192676);
double r3192678 = r3192673 / r3192677;
double r3192679 = r3192678 / r3192677;
double r3192680 = -r3192671;
double r3192681 = r3192680 / r3192677;
double r3192682 = r3192667 ? r3192679 : r3192681;
return r3192682;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < 1.0408011483354069e+55Initial program 23.3
rmApplied add-sqr-sqrt23.3
Applied associate-/r*23.3
if 1.0408011483354069e+55 < y.im Initial program 35.1
rmApplied add-sqr-sqrt35.1
Applied associate-/r*35.1
Taylor expanded around 0 36.3
Simplified36.3
Final simplification26.2
herbie shell --seed 2019192
(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))))