\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}\;\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} = -\infty:\\
\;\;\;\;\frac{x.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{elif}\;\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 1.40075589692360536 \cdot 10^{294}:\\
\;\;\;\;\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 r108602 = x_im;
double r108603 = y_re;
double r108604 = r108602 * r108603;
double r108605 = x_re;
double r108606 = y_im;
double r108607 = r108605 * r108606;
double r108608 = r108604 - r108607;
double r108609 = r108603 * r108603;
double r108610 = r108606 * r108606;
double r108611 = r108609 + r108610;
double r108612 = r108608 / r108611;
return r108612;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r108613 = x_im;
double r108614 = y_re;
double r108615 = r108613 * r108614;
double r108616 = x_re;
double r108617 = y_im;
double r108618 = r108616 * r108617;
double r108619 = r108615 - r108618;
double r108620 = r108614 * r108614;
double r108621 = r108617 * r108617;
double r108622 = r108620 + r108621;
double r108623 = r108619 / r108622;
double r108624 = -inf.0;
bool r108625 = r108623 <= r108624;
double r108626 = sqrt(r108622);
double r108627 = r108613 / r108626;
double r108628 = 1.4007558969236054e+294;
bool r108629 = r108623 <= r108628;
double r108630 = r108619 / r108626;
double r108631 = r108630 / r108626;
double r108632 = -r108616;
double r108633 = r108632 / r108626;
double r108634 = r108629 ? r108631 : r108633;
double r108635 = r108625 ? r108627 : r108634;
return r108635;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < -inf.0Initial program 64.0
rmApplied add-sqr-sqrt64.0
Applied associate-/r*64.0
Taylor expanded around inf 54.2
if -inf.0 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < 1.4007558969236054e+294Initial program 11.5
rmApplied add-sqr-sqrt11.5
Applied associate-/r*11.4
if 1.4007558969236054e+294 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.4
rmApplied add-sqr-sqrt63.4
Applied associate-/r*63.4
Taylor expanded around 0 60.2
Simplified60.2
Final simplification25.1
herbie shell --seed 2019199
(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))))