\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.937670017341036534919481795915749319496 \cdot 10^{62}:\\
\;\;\;\;\frac{\frac{1}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot \left(x.im \cdot y.re - y.im \cdot x.re\right)}{\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 r3253812 = x_im;
double r3253813 = y_re;
double r3253814 = r3253812 * r3253813;
double r3253815 = x_re;
double r3253816 = y_im;
double r3253817 = r3253815 * r3253816;
double r3253818 = r3253814 - r3253817;
double r3253819 = r3253813 * r3253813;
double r3253820 = r3253816 * r3253816;
double r3253821 = r3253819 + r3253820;
double r3253822 = r3253818 / r3253821;
return r3253822;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r3253823 = y_im;
double r3253824 = 1.9376700173410365e+62;
bool r3253825 = r3253823 <= r3253824;
double r3253826 = 1.0;
double r3253827 = r3253823 * r3253823;
double r3253828 = y_re;
double r3253829 = r3253828 * r3253828;
double r3253830 = r3253827 + r3253829;
double r3253831 = sqrt(r3253830);
double r3253832 = r3253826 / r3253831;
double r3253833 = x_im;
double r3253834 = r3253833 * r3253828;
double r3253835 = x_re;
double r3253836 = r3253823 * r3253835;
double r3253837 = r3253834 - r3253836;
double r3253838 = r3253832 * r3253837;
double r3253839 = r3253838 / r3253831;
double r3253840 = -r3253835;
double r3253841 = r3253840 / r3253831;
double r3253842 = r3253825 ? r3253839 : r3253841;
return r3253842;
}



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.9376700173410365e+62Initial program 23.4
rmApplied add-sqr-sqrt23.4
Applied associate-/r*23.3
rmApplied div-inv23.4
if 1.9376700173410365e+62 < y.im Initial program 37.3
rmApplied add-sqr-sqrt37.3
Applied associate-/r*37.2
Taylor expanded around 0 37.5
Simplified37.5
Final simplification26.3
herbie shell --seed 2019170
(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))))