\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{\frac{x.im}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}} \cdot \frac{y.re}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}} - \frac{x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}double f(double x_re, double x_im, double y_re, double y_im) {
double r59634 = x_im;
double r59635 = y_re;
double r59636 = r59634 * r59635;
double r59637 = x_re;
double r59638 = y_im;
double r59639 = r59637 * r59638;
double r59640 = r59636 - r59639;
double r59641 = r59635 * r59635;
double r59642 = r59638 * r59638;
double r59643 = r59641 + r59642;
double r59644 = r59640 / r59643;
return r59644;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r59645 = x_im;
double r59646 = y_re;
double r59647 = r59646 * r59646;
double r59648 = y_im;
double r59649 = r59648 * r59648;
double r59650 = r59647 + r59649;
double r59651 = sqrt(r59650);
double r59652 = sqrt(r59651);
double r59653 = r59645 / r59652;
double r59654 = r59646 / r59652;
double r59655 = r59653 * r59654;
double r59656 = x_re;
double r59657 = r59656 * r59648;
double r59658 = r59657 / r59651;
double r59659 = r59655 - r59658;
double r59660 = r59652 * r59652;
double r59661 = r59659 / r59660;
return r59661;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 25.8
rmApplied add-sqr-sqrt25.8
Applied associate-/r*25.7
rmApplied div-sub25.7
rmApplied add-sqr-sqrt25.7
Applied sqrt-prod25.8
Applied times-frac24.1
rmApplied add-sqr-sqrt24.1
Applied sqrt-prod24.3
Final simplification24.3
herbie shell --seed 2019303
(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))))