\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.672387965946081 \cdot 10^{+87}:\\
\;\;\;\;\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 r2955722 = x_im;
double r2955723 = y_re;
double r2955724 = r2955722 * r2955723;
double r2955725 = x_re;
double r2955726 = y_im;
double r2955727 = r2955725 * r2955726;
double r2955728 = r2955724 - r2955727;
double r2955729 = r2955723 * r2955723;
double r2955730 = r2955726 * r2955726;
double r2955731 = r2955729 + r2955730;
double r2955732 = r2955728 / r2955731;
return r2955732;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r2955733 = y_im;
double r2955734 = 7.672387965946081e+87;
bool r2955735 = r2955733 <= r2955734;
double r2955736 = x_im;
double r2955737 = y_re;
double r2955738 = r2955736 * r2955737;
double r2955739 = x_re;
double r2955740 = r2955733 * r2955739;
double r2955741 = r2955738 - r2955740;
double r2955742 = r2955733 * r2955733;
double r2955743 = r2955737 * r2955737;
double r2955744 = r2955742 + r2955743;
double r2955745 = sqrt(r2955744);
double r2955746 = r2955741 / r2955745;
double r2955747 = r2955746 / r2955745;
double r2955748 = -r2955739;
double r2955749 = r2955748 / r2955745;
double r2955750 = r2955735 ? r2955747 : r2955749;
return r2955750;
}



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.672387965946081e+87Initial program 22.7
rmApplied add-sqr-sqrt22.7
Applied associate-/r*22.6
if 7.672387965946081e+87 < y.im Initial program 38.2
rmApplied add-sqr-sqrt38.2
Applied associate-/r*38.2
Taylor expanded around 0 38.2
Simplified38.2
Final simplification25.6
herbie shell --seed 2019168
(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))))