\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 \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\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 r11984852 = x_im;
double r11984853 = y_re;
double r11984854 = r11984852 * r11984853;
double r11984855 = x_re;
double r11984856 = y_im;
double r11984857 = r11984855 * r11984856;
double r11984858 = r11984854 - r11984857;
double r11984859 = r11984853 * r11984853;
double r11984860 = r11984856 * r11984856;
double r11984861 = r11984859 + r11984860;
double r11984862 = r11984858 / r11984861;
return r11984862;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r11984863 = x_im;
double r11984864 = y_re;
double r11984865 = r11984863 * r11984864;
double r11984866 = x_re;
double r11984867 = y_im;
double r11984868 = r11984866 * r11984867;
double r11984869 = r11984865 - r11984868;
double r11984870 = r11984864 * r11984864;
double r11984871 = r11984867 * r11984867;
double r11984872 = r11984870 + r11984871;
double r11984873 = sqrt(r11984872);
double r11984874 = r11984869 / r11984873;
double r11984875 = r11984874 / r11984873;
return r11984875;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 25.6
rmApplied add-sqr-sqrt25.6
Applied associate-/r*25.5
rmApplied *-un-lft-identity25.5
Applied associate-/r*25.5
Final simplification25.5
herbie shell --seed 2019107
(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))))