\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{x.im \cdot \frac{y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} - \frac{x.re}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.im}}}{\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 r71634 = x_im;
double r71635 = y_re;
double r71636 = r71634 * r71635;
double r71637 = x_re;
double r71638 = y_im;
double r71639 = r71637 * r71638;
double r71640 = r71636 - r71639;
double r71641 = r71635 * r71635;
double r71642 = r71638 * r71638;
double r71643 = r71641 + r71642;
double r71644 = r71640 / r71643;
return r71644;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r71645 = x_im;
double r71646 = y_re;
double r71647 = r71646 * r71646;
double r71648 = y_im;
double r71649 = r71648 * r71648;
double r71650 = r71647 + r71649;
double r71651 = sqrt(r71650);
double r71652 = r71646 / r71651;
double r71653 = r71645 * r71652;
double r71654 = x_re;
double r71655 = r71651 / r71648;
double r71656 = r71654 / r71655;
double r71657 = r71653 - r71656;
double r71658 = r71657 / r71651;
return r71658;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 25.9
rmApplied add-sqr-sqrt25.9
Applied associate-/r*25.8
rmApplied div-sub25.8
rmApplied associate-/l*24.0
rmApplied *-un-lft-identity24.0
Applied sqrt-prod24.0
Applied times-frac22.1
Simplified22.1
Final simplification22.1
herbie shell --seed 2020001
(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))))