\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.660481816459021646058030108492220670906 \cdot 10^{-156} \lor \neg \left(y.im \le 3.297289885168792012073579345208696767758 \cdot 10^{91}\right):\\
\;\;\;\;\frac{y.re}{y.im \cdot y.im + y.re \cdot y.re} \cdot x.im - \frac{y.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot \frac{x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\
\mathbf{else}:\\
\;\;\;\;\left(x.im \cdot \frac{y.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\right) \cdot \frac{1}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} - \frac{y.im \cdot x.re}{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 r59606 = x_im;
double r59607 = y_re;
double r59608 = r59606 * r59607;
double r59609 = x_re;
double r59610 = y_im;
double r59611 = r59609 * r59610;
double r59612 = r59608 - r59611;
double r59613 = r59607 * r59607;
double r59614 = r59610 * r59610;
double r59615 = r59613 + r59614;
double r59616 = r59612 / r59615;
return r59616;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r59617 = y_im;
double r59618 = -3.6604818164590216e-156;
bool r59619 = r59617 <= r59618;
double r59620 = 3.297289885168792e+91;
bool r59621 = r59617 <= r59620;
double r59622 = !r59621;
bool r59623 = r59619 || r59622;
double r59624 = y_re;
double r59625 = r59617 * r59617;
double r59626 = r59624 * r59624;
double r59627 = r59625 + r59626;
double r59628 = r59624 / r59627;
double r59629 = x_im;
double r59630 = r59628 * r59629;
double r59631 = sqrt(r59627);
double r59632 = r59617 / r59631;
double r59633 = x_re;
double r59634 = r59633 / r59631;
double r59635 = r59632 * r59634;
double r59636 = r59630 - r59635;
double r59637 = r59624 / r59631;
double r59638 = r59629 * r59637;
double r59639 = 1.0;
double r59640 = r59639 / r59631;
double r59641 = r59638 * r59640;
double r59642 = r59617 * r59633;
double r59643 = r59642 / r59627;
double r59644 = r59641 - r59643;
double r59645 = r59623 ? r59636 : r59644;
return r59645;
}



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.6604818164590216e-156 or 3.297289885168792e+91 < y.im Initial program 29.7
rmApplied div-sub29.7
Simplified29.0
rmApplied add-sqr-sqrt29.0
Applied times-frac26.1
Simplified26.1
Simplified26.1
if -3.6604818164590216e-156 < y.im < 3.297289885168792e+91Initial program 20.3
rmApplied div-sub20.3
Simplified17.6
rmApplied add-sqr-sqrt17.6
Applied *-un-lft-identity17.6
Applied times-frac17.6
Applied associate-*l*17.6
Simplified17.6
Final simplification22.4
herbie shell --seed 2019194
(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))))