\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{\mathsf{fma}\left(\frac{x.im}{\sqrt{\mathsf{hypot}\left(y.re, y.im\right)}}, \frac{y.re}{\sqrt{\mathsf{hypot}\left(y.re, y.im\right)}}, -\frac{y.im}{\sqrt{\mathsf{hypot}\left(y.re, y.im\right)}} \cdot \frac{x.re}{\sqrt{\mathsf{hypot}\left(y.re, y.im\right)}}\right) + \frac{y.im}{\sqrt{\mathsf{hypot}\left(y.re, y.im\right)}} \cdot \left(\left(-\frac{x.re}{\sqrt{\mathsf{hypot}\left(y.re, y.im\right)}}\right) + \frac{x.re}{\sqrt{\mathsf{hypot}\left(y.re, y.im\right)}}\right)}{\mathsf{hypot}\left(y.re, y.im\right)}double f(double x_re, double x_im, double y_re, double y_im) {
double r72217 = x_im;
double r72218 = y_re;
double r72219 = r72217 * r72218;
double r72220 = x_re;
double r72221 = y_im;
double r72222 = r72220 * r72221;
double r72223 = r72219 - r72222;
double r72224 = r72218 * r72218;
double r72225 = r72221 * r72221;
double r72226 = r72224 + r72225;
double r72227 = r72223 / r72226;
return r72227;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r72228 = x_im;
double r72229 = y_re;
double r72230 = y_im;
double r72231 = hypot(r72229, r72230);
double r72232 = sqrt(r72231);
double r72233 = r72228 / r72232;
double r72234 = r72229 / r72232;
double r72235 = r72230 / r72232;
double r72236 = x_re;
double r72237 = r72236 / r72232;
double r72238 = r72235 * r72237;
double r72239 = -r72238;
double r72240 = fma(r72233, r72234, r72239);
double r72241 = -r72237;
double r72242 = r72241 + r72237;
double r72243 = r72235 * r72242;
double r72244 = r72240 + r72243;
double r72245 = r72244 / r72231;
return r72245;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 25.9
rmApplied add-sqr-sqrt25.9
Applied *-un-lft-identity25.9
Applied times-frac25.9
Simplified25.9
Simplified17.0
rmApplied *-un-lft-identity17.0
Applied associate-*l*17.0
Simplified16.9
rmApplied div-sub16.9
rmApplied add-sqr-sqrt17.0
Applied times-frac9.4
Applied add-sqr-sqrt9.5
Applied times-frac1.0
Applied prod-diff1.0
Simplified1.0
Final simplification1.0
herbie shell --seed 2020001 +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))))