\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{x.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} - \frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{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 r69560 = x_im;
double r69561 = y_re;
double r69562 = r69560 * r69561;
double r69563 = x_re;
double r69564 = y_im;
double r69565 = r69563 * r69564;
double r69566 = r69562 - r69565;
double r69567 = r69561 * r69561;
double r69568 = r69564 * r69564;
double r69569 = r69567 + r69568;
double r69570 = r69566 / r69569;
return r69570;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r69571 = x_im;
double r69572 = y_re;
double r69573 = r69572 * r69572;
double r69574 = y_im;
double r69575 = r69574 * r69574;
double r69576 = r69573 + r69575;
double r69577 = sqrt(r69576);
double r69578 = r69571 / r69577;
double r69579 = r69572 / r69577;
double r69580 = r69578 * r69579;
double r69581 = x_re;
double r69582 = r69581 / r69577;
double r69583 = r69574 / r69577;
double r69584 = r69582 * r69583;
double r69585 = r69580 - r69584;
return r69585;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.2
rmApplied div-sub26.2
rmApplied add-sqr-sqrt26.2
Applied times-frac24.7
rmApplied add-sqr-sqrt24.7
Applied times-frac22.9
Final simplification22.9
herbie shell --seed 2020049
(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))))