\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{\mathsf{hypot}\left(y.re, y.im\right)}{y.re}} - \frac{y.im}{\frac{\mathsf{hypot}\left(y.re, y.im\right)}{x.re}}}{\mathsf{hypot}\left(y.re, y.im\right)}double f(double x_re, double x_im, double y_re, double y_im) {
double r87845 = x_im;
double r87846 = y_re;
double r87847 = r87845 * r87846;
double r87848 = x_re;
double r87849 = y_im;
double r87850 = r87848 * r87849;
double r87851 = r87847 - r87850;
double r87852 = r87846 * r87846;
double r87853 = r87849 * r87849;
double r87854 = r87852 + r87853;
double r87855 = r87851 / r87854;
return r87855;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r87856 = x_im;
double r87857 = y_re;
double r87858 = y_im;
double r87859 = hypot(r87857, r87858);
double r87860 = r87859 / r87857;
double r87861 = r87856 / r87860;
double r87862 = x_re;
double r87863 = r87859 / r87862;
double r87864 = r87858 / r87863;
double r87865 = r87861 - r87864;
double r87866 = r87865 / r87859;
return r87866;
}



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
Simplified26.4
rmApplied add-sqr-sqrt26.4
Applied *-un-lft-identity26.4
Applied times-frac26.4
Simplified26.4
Simplified17.0
rmApplied *-un-lft-identity17.0
Applied add-sqr-sqrt17.0
Applied times-frac17.0
Applied associate-*l*17.0
Simplified16.9
rmApplied div-sub16.9
Simplified9.8
rmApplied associate-/l*1.1
Final simplification1.1
herbie shell --seed 2019174 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, imaginary part"
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))