\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 r43905 = x_im;
double r43906 = y_re;
double r43907 = r43905 * r43906;
double r43908 = x_re;
double r43909 = y_im;
double r43910 = r43908 * r43909;
double r43911 = r43907 - r43910;
double r43912 = r43906 * r43906;
double r43913 = r43909 * r43909;
double r43914 = r43912 + r43913;
double r43915 = r43911 / r43914;
return r43915;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r43916 = y_re;
double r43917 = y_im;
double r43918 = hypot(r43916, r43917);
double r43919 = r43916 / r43918;
double r43920 = x_im;
double r43921 = r43919 * r43920;
double r43922 = x_re;
double r43923 = r43922 / r43918;
double r43924 = r43923 * r43917;
double r43925 = r43921 - r43924;
double r43926 = r43925 / r43918;
return r43926;
}



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 add-cube-cbrt16.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))))