\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}:\\
\;\;\;\;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 r43729 = x_im;
double r43730 = y_re;
double r43731 = r43729 * r43730;
double r43732 = x_re;
double r43733 = y_im;
double r43734 = r43732 * r43733;
double r43735 = r43731 - r43734;
double r43736 = r43730 * r43730;
double r43737 = r43733 * r43733;
double r43738 = r43736 + r43737;
double r43739 = r43735 / r43738;
return r43739;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r43740 = y_im;
double r43741 = 4.644327594217982e+184;
bool r43742 = r43740 <= r43741;
double r43743 = 1.0;
double r43744 = x_im;
double r43745 = y_re;
double r43746 = r43744 * r43745;
double r43747 = x_re;
double r43748 = r43747 * r43740;
double r43749 = r43746 - r43748;
double r43750 = hypot(r43745, r43740);
double r43751 = r43749 / r43750;
double r43752 = r43751 / r43750;
double r43753 = r43743 * r43752;
double r43754 = -1.0;
double r43755 = r43754 * r43747;
double r43756 = r43755 / r43750;
double r43757 = r43743 * r43756;
double r43758 = r43742 ? r43753 : r43757;
return r43758;
}



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 *-un-lft-identity15.5
Applied associate-*l*15.5
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 *-un-lft-identity31.6
Applied 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))))