\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}{\frac{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}{y.re}} - \frac{y.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot x.re}{\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 r55571 = x_im;
double r55572 = y_re;
double r55573 = r55571 * r55572;
double r55574 = x_re;
double r55575 = y_im;
double r55576 = r55574 * r55575;
double r55577 = r55573 - r55576;
double r55578 = r55572 * r55572;
double r55579 = r55575 * r55575;
double r55580 = r55578 + r55579;
double r55581 = r55577 / r55580;
return r55581;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r55582 = x_im;
double r55583 = y_im;
double r55584 = r55583 * r55583;
double r55585 = y_re;
double r55586 = r55585 * r55585;
double r55587 = r55584 + r55586;
double r55588 = sqrt(r55587);
double r55589 = r55588 / r55585;
double r55590 = r55582 / r55589;
double r55591 = r55583 / r55588;
double r55592 = x_re;
double r55593 = r55591 * r55592;
double r55594 = r55590 - r55593;
double r55595 = r55586 + r55584;
double r55596 = sqrt(r55595);
double r55597 = r55594 / r55596;
return r55597;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.6
rmApplied add-sqr-sqrt26.6
Applied associate-/r*26.5
rmApplied div-sub26.5
Simplified26.5
Simplified25.1
rmApplied associate-/l*23.1
rmApplied associate-/r/22.7
Final simplification22.7
herbie shell --seed 2019347
(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))))