\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 9.136570255790176 \cdot 10^{+58}:\\
\;\;\;\;\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 r4144399 = x_im;
double r4144400 = y_re;
double r4144401 = r4144399 * r4144400;
double r4144402 = x_re;
double r4144403 = y_im;
double r4144404 = r4144402 * r4144403;
double r4144405 = r4144401 - r4144404;
double r4144406 = r4144400 * r4144400;
double r4144407 = r4144403 * r4144403;
double r4144408 = r4144406 + r4144407;
double r4144409 = r4144405 / r4144408;
return r4144409;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r4144410 = y_im;
double r4144411 = 9.136570255790176e+58;
bool r4144412 = r4144410 <= r4144411;
double r4144413 = x_im;
double r4144414 = y_re;
double r4144415 = r4144413 * r4144414;
double r4144416 = x_re;
double r4144417 = r4144410 * r4144416;
double r4144418 = r4144415 - r4144417;
double r4144419 = r4144410 * r4144410;
double r4144420 = r4144414 * r4144414;
double r4144421 = r4144419 + r4144420;
double r4144422 = sqrt(r4144421);
double r4144423 = r4144418 / r4144422;
double r4144424 = r4144423 / r4144422;
double r4144425 = -r4144416;
double r4144426 = r4144425 / r4144422;
double r4144427 = r4144412 ? r4144424 : r4144426;
return r4144427;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < 9.136570255790176e+58Initial program 23.1
rmApplied add-sqr-sqrt23.1
Applied associate-/r*23.1
if 9.136570255790176e+58 < y.im Initial program 35.2
rmApplied add-sqr-sqrt35.2
Applied associate-/r*35.2
Taylor expanded around 0 36.2
Simplified36.2
Final simplification25.9
herbie shell --seed 2019138
(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))))