\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}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}} \cdot \frac{y.re}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}} - \frac{x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \sqrt{\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 r47026 = x_im;
double r47027 = y_re;
double r47028 = r47026 * r47027;
double r47029 = x_re;
double r47030 = y_im;
double r47031 = r47029 * r47030;
double r47032 = r47028 - r47031;
double r47033 = r47027 * r47027;
double r47034 = r47030 * r47030;
double r47035 = r47033 + r47034;
double r47036 = r47032 / r47035;
return r47036;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r47037 = x_im;
double r47038 = y_re;
double r47039 = r47038 * r47038;
double r47040 = y_im;
double r47041 = r47040 * r47040;
double r47042 = r47039 + r47041;
double r47043 = sqrt(r47042);
double r47044 = sqrt(r47043);
double r47045 = r47037 / r47044;
double r47046 = r47038 / r47044;
double r47047 = r47045 * r47046;
double r47048 = x_re;
double r47049 = r47048 * r47040;
double r47050 = r47049 / r47043;
double r47051 = r47047 - r47050;
double r47052 = r47044 * r47044;
double r47053 = r47051 / r47052;
return r47053;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 25.8
rmApplied add-sqr-sqrt25.8
Applied associate-/r*25.7
rmApplied div-sub25.7
rmApplied add-sqr-sqrt25.7
Applied sqrt-prod25.8
Applied times-frac24.1
rmApplied add-sqr-sqrt24.1
Applied sqrt-prod24.3
Final simplification24.3
herbie shell --seed 2019303
(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))))