\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{x.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} - \frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{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 r60910 = x_im;
double r60911 = y_re;
double r60912 = r60910 * r60911;
double r60913 = x_re;
double r60914 = y_im;
double r60915 = r60913 * r60914;
double r60916 = r60912 - r60915;
double r60917 = r60911 * r60911;
double r60918 = r60914 * r60914;
double r60919 = r60917 + r60918;
double r60920 = r60916 / r60919;
return r60920;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r60921 = x_im;
double r60922 = y_re;
double r60923 = r60922 * r60922;
double r60924 = y_im;
double r60925 = r60924 * r60924;
double r60926 = r60923 + r60925;
double r60927 = sqrt(r60926);
double r60928 = r60921 / r60927;
double r60929 = r60922 / r60927;
double r60930 = r60928 * r60929;
double r60931 = x_re;
double r60932 = r60931 / r60927;
double r60933 = r60924 / r60927;
double r60934 = r60932 * r60933;
double r60935 = r60930 - r60934;
return r60935;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.3
rmApplied div-sub26.3
rmApplied add-sqr-sqrt26.3
Applied times-frac24.9
rmApplied add-sqr-sqrt24.9
Applied times-frac23.2
Final simplification23.2
herbie shell --seed 2020039
(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))))