\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 r63431 = x_im;
double r63432 = y_re;
double r63433 = r63431 * r63432;
double r63434 = x_re;
double r63435 = y_im;
double r63436 = r63434 * r63435;
double r63437 = r63433 - r63436;
double r63438 = r63432 * r63432;
double r63439 = r63435 * r63435;
double r63440 = r63438 + r63439;
double r63441 = r63437 / r63440;
return r63441;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r63442 = x_im;
double r63443 = y_re;
double r63444 = r63443 * r63443;
double r63445 = y_im;
double r63446 = r63445 * r63445;
double r63447 = r63444 + r63446;
double r63448 = sqrt(r63447);
double r63449 = r63442 / r63448;
double r63450 = r63443 / r63448;
double r63451 = r63449 * r63450;
double r63452 = x_re;
double r63453 = r63452 / r63448;
double r63454 = r63445 / r63448;
double r63455 = r63453 * r63454;
double r63456 = r63451 - r63455;
return r63456;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 25.7
rmApplied div-sub25.7
rmApplied add-sqr-sqrt25.7
Applied times-frac24.5
rmApplied add-sqr-sqrt24.5
Applied times-frac22.9
Final simplification22.9
herbie shell --seed 2020059
(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))))