\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.re \le 6.467777198430207 \cdot 10^{+42}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\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.im}{\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 r4659112 = x_im;
double r4659113 = y_re;
double r4659114 = r4659112 * r4659113;
double r4659115 = x_re;
double r4659116 = y_im;
double r4659117 = r4659115 * r4659116;
double r4659118 = r4659114 - r4659117;
double r4659119 = r4659113 * r4659113;
double r4659120 = r4659116 * r4659116;
double r4659121 = r4659119 + r4659120;
double r4659122 = r4659118 / r4659121;
return r4659122;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r4659123 = y_re;
double r4659124 = 6.467777198430207e+42;
bool r4659125 = r4659123 <= r4659124;
double r4659126 = x_im;
double r4659127 = r4659126 * r4659123;
double r4659128 = x_re;
double r4659129 = y_im;
double r4659130 = r4659128 * r4659129;
double r4659131 = r4659127 - r4659130;
double r4659132 = r4659129 * r4659129;
double r4659133 = r4659123 * r4659123;
double r4659134 = r4659132 + r4659133;
double r4659135 = sqrt(r4659134);
double r4659136 = r4659131 / r4659135;
double r4659137 = r4659136 / r4659135;
double r4659138 = r4659126 / r4659135;
double r4659139 = r4659125 ? r4659137 : r4659138;
return r4659139;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < 6.467777198430207e+42Initial program 23.7
rmApplied add-sqr-sqrt23.7
Applied associate-/r*23.7
if 6.467777198430207e+42 < y.re Initial program 34.3
rmApplied add-sqr-sqrt34.3
Applied associate-/r*34.3
rmApplied div-inv34.3
Taylor expanded around inf 35.8
Final simplification26.5
herbie shell --seed 2019124
(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))))