\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{\frac{y.re}{\mathsf{hypot}\left(y.re, y.im\right)} \cdot x.im - \frac{x.re}{\mathsf{hypot}\left(y.re, y.im\right)} \cdot y.im}{\mathsf{hypot}\left(y.re, y.im\right)}double f(double x_re, double x_im, double y_re, double y_im) {
double r54461 = x_im;
double r54462 = y_re;
double r54463 = r54461 * r54462;
double r54464 = x_re;
double r54465 = y_im;
double r54466 = r54464 * r54465;
double r54467 = r54463 - r54466;
double r54468 = r54462 * r54462;
double r54469 = r54465 * r54465;
double r54470 = r54468 + r54469;
double r54471 = r54467 / r54470;
return r54471;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r54472 = y_re;
double r54473 = y_im;
double r54474 = hypot(r54472, r54473);
double r54475 = r54472 / r54474;
double r54476 = x_im;
double r54477 = r54475 * r54476;
double r54478 = x_re;
double r54479 = r54478 / r54474;
double r54480 = r54479 * r54473;
double r54481 = r54477 - r54480;
double r54482 = r54481 / r54474;
return r54482;
}



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
Simplified25.9
rmApplied add-sqr-sqrt25.9
Applied *-un-lft-identity25.9
Applied times-frac25.9
Simplified25.9
Simplified16.8
rmApplied *-un-lft-identity16.8
Applied *-un-lft-identity16.8
Applied times-frac16.8
Applied associate-*l*16.8
Simplified16.7
rmApplied div-sub16.7
Simplified9.0
Simplified0.9
Final simplification0.9
herbie shell --seed 2019323 +o rules:numerics
(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))))