\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{x.im \cdot \frac{y.re}{\mathsf{hypot}\left(y.im, y.re\right)} - \frac{y.im}{\mathsf{hypot}\left(y.im, y.re\right)} \cdot x.re}{\mathsf{hypot}\left(y.im, y.re\right)}double f(double x_re, double x_im, double y_re, double y_im) {
double r55054 = x_im;
double r55055 = y_re;
double r55056 = r55054 * r55055;
double r55057 = x_re;
double r55058 = y_im;
double r55059 = r55057 * r55058;
double r55060 = r55056 - r55059;
double r55061 = r55055 * r55055;
double r55062 = r55058 * r55058;
double r55063 = r55061 + r55062;
double r55064 = r55060 / r55063;
return r55064;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r55065 = x_im;
double r55066 = y_re;
double r55067 = y_im;
double r55068 = hypot(r55067, r55066);
double r55069 = r55066 / r55068;
double r55070 = r55065 * r55069;
double r55071 = r55067 / r55068;
double r55072 = x_re;
double r55073 = r55071 * r55072;
double r55074 = r55070 - r55073;
double r55075 = r55074 / r55068;
return r55075;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.7
Simplified26.7
rmApplied add-sqr-sqrt26.7
Applied *-un-lft-identity26.7
Applied times-frac26.8
Simplified26.8
Simplified17.3
rmApplied associate-*r/17.3
Simplified17.2
rmApplied div-sub17.2
Simplified9.0
rmApplied *-un-lft-identity9.0
Applied times-frac0.6
Simplified0.6
Final simplification0.6
herbie shell --seed 2020046 +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))))