\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 r52868 = x_im;
double r52869 = y_re;
double r52870 = r52868 * r52869;
double r52871 = x_re;
double r52872 = y_im;
double r52873 = r52871 * r52872;
double r52874 = r52870 - r52873;
double r52875 = r52869 * r52869;
double r52876 = r52872 * r52872;
double r52877 = r52875 + r52876;
double r52878 = r52874 / r52877;
return r52878;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r52879 = y_re;
double r52880 = y_im;
double r52881 = hypot(r52879, r52880);
double r52882 = r52879 / r52881;
double r52883 = x_im;
double r52884 = r52882 * r52883;
double r52885 = x_re;
double r52886 = r52885 / r52881;
double r52887 = r52886 * r52880;
double r52888 = r52884 - r52887;
double r52889 = r52888 / r52881;
return r52889;
}



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.7
rmApplied *-un-lft-identity16.7
Applied add-cube-cbrt16.7
Applied times-frac16.7
Applied associate-*l*16.7
Simplified16.6
rmApplied div-sub16.6
Simplified9.1
Simplified0.8
Final simplification0.8
herbie shell --seed 2019326 +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))))