\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.67504458165974214 \cdot 10^{89}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r72501 = x_im;
double r72502 = y_re;
double r72503 = r72501 * r72502;
double r72504 = x_re;
double r72505 = y_im;
double r72506 = r72504 * r72505;
double r72507 = r72503 - r72506;
double r72508 = r72502 * r72502;
double r72509 = r72505 * r72505;
double r72510 = r72508 + r72509;
double r72511 = r72507 / r72510;
return r72511;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r72512 = y_im;
double r72513 = 3.675044581659742e+89;
bool r72514 = r72512 <= r72513;
double r72515 = x_im;
double r72516 = y_re;
double r72517 = r72515 * r72516;
double r72518 = x_re;
double r72519 = r72518 * r72512;
double r72520 = r72517 - r72519;
double r72521 = r72516 * r72516;
double r72522 = r72512 * r72512;
double r72523 = r72521 + r72522;
double r72524 = sqrt(r72523);
double r72525 = r72520 / r72524;
double r72526 = r72525 / r72524;
double r72527 = -r72518;
double r72528 = r72527 / r72524;
double r72529 = r72514 ? r72526 : r72528;
return r72529;
}



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.675044581659742e+89Initial program 23.7
rmApplied add-sqr-sqrt23.7
Applied associate-/r*23.6
if 3.675044581659742e+89 < y.im Initial program 38.6
rmApplied add-sqr-sqrt38.7
Applied associate-/r*38.6
Taylor expanded around 0 38.0
Simplified38.0
Final simplification26.5
herbie shell --seed 2020042
(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))))