\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 r63420 = x_im;
double r63421 = y_re;
double r63422 = r63420 * r63421;
double r63423 = x_re;
double r63424 = y_im;
double r63425 = r63423 * r63424;
double r63426 = r63422 - r63425;
double r63427 = r63421 * r63421;
double r63428 = r63424 * r63424;
double r63429 = r63427 + r63428;
double r63430 = r63426 / r63429;
return r63430;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r63431 = x_im;
double r63432 = y_re;
double r63433 = r63432 * r63432;
double r63434 = y_im;
double r63435 = r63434 * r63434;
double r63436 = r63433 + r63435;
double r63437 = sqrt(r63436);
double r63438 = r63431 / r63437;
double r63439 = r63432 / r63437;
double r63440 = r63438 * r63439;
double r63441 = x_re;
double r63442 = r63441 / r63437;
double r63443 = r63434 / r63437;
double r63444 = r63442 * r63443;
double r63445 = r63440 - r63444;
return r63445;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.4
rmApplied div-sub26.4
rmApplied add-sqr-sqrt26.4
Applied times-frac25.1
rmApplied add-sqr-sqrt25.1
Applied times-frac23.7
Final simplification23.7
herbie shell --seed 2020043
(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))))