\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 3.241508515477217 \cdot 10^{+87}:\\
\;\;\;\;\frac{x.im \cdot y.re - y.im \cdot x.re}{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 r2043361 = x_im;
double r2043362 = y_re;
double r2043363 = r2043361 * r2043362;
double r2043364 = x_re;
double r2043365 = y_im;
double r2043366 = r2043364 * r2043365;
double r2043367 = r2043363 - r2043366;
double r2043368 = r2043362 * r2043362;
double r2043369 = r2043365 * r2043365;
double r2043370 = r2043368 + r2043369;
double r2043371 = r2043367 / r2043370;
return r2043371;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r2043372 = y_im;
double r2043373 = 3.241508515477217e+87;
bool r2043374 = r2043372 <= r2043373;
double r2043375 = x_im;
double r2043376 = y_re;
double r2043377 = r2043375 * r2043376;
double r2043378 = x_re;
double r2043379 = r2043372 * r2043378;
double r2043380 = r2043377 - r2043379;
double r2043381 = r2043372 * r2043372;
double r2043382 = r2043376 * r2043376;
double r2043383 = r2043381 + r2043382;
double r2043384 = r2043380 / r2043383;
double r2043385 = -r2043378;
double r2043386 = sqrt(r2043383);
double r2043387 = r2043385 / r2043386;
double r2043388 = r2043374 ? r2043384 : r2043387;
return r2043388;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < 3.241508515477217e+87Initial program 22.5
if 3.241508515477217e+87 < y.im Initial program 37.8
rmApplied add-sqr-sqrt37.8
Applied associate-/r*37.8
Taylor expanded around 0 37.0
Simplified37.0
Final simplification25.2
herbie shell --seed 2019132
(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))))