\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 \cdot x.im - y.im \cdot x.re}{\sqrt{\mathsf{fma}\left(y.im, y.im, y.re \cdot y.re\right)}}}{\sqrt{\mathsf{fma}\left(y.im, y.im, y.re \cdot y.re\right)}}double f(double x_re, double x_im, double y_re, double y_im) {
double r3283069 = x_im;
double r3283070 = y_re;
double r3283071 = r3283069 * r3283070;
double r3283072 = x_re;
double r3283073 = y_im;
double r3283074 = r3283072 * r3283073;
double r3283075 = r3283071 - r3283074;
double r3283076 = r3283070 * r3283070;
double r3283077 = r3283073 * r3283073;
double r3283078 = r3283076 + r3283077;
double r3283079 = r3283075 / r3283078;
return r3283079;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r3283080 = y_re;
double r3283081 = x_im;
double r3283082 = r3283080 * r3283081;
double r3283083 = y_im;
double r3283084 = x_re;
double r3283085 = r3283083 * r3283084;
double r3283086 = r3283082 - r3283085;
double r3283087 = r3283080 * r3283080;
double r3283088 = fma(r3283083, r3283083, r3283087);
double r3283089 = sqrt(r3283088);
double r3283090 = r3283086 / r3283089;
double r3283091 = r3283090 / r3283089;
return r3283091;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 25.1
Simplified25.1
rmApplied add-sqr-sqrt25.1
Applied associate-/r*25.0
Taylor expanded around inf 25.0
Final simplification25.0
herbie shell --seed 2019158 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, imaginary part"
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))