\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\begin{array}{l}
\mathbf{if}\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 4.737122355537421671534518653596175011386 \cdot 10^{285}:\\
\;\;\;\;\frac{\frac{x.re \cdot y.re + x.im \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}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r47848 = x_re;
double r47849 = y_re;
double r47850 = r47848 * r47849;
double r47851 = x_im;
double r47852 = y_im;
double r47853 = r47851 * r47852;
double r47854 = r47850 + r47853;
double r47855 = r47849 * r47849;
double r47856 = r47852 * r47852;
double r47857 = r47855 + r47856;
double r47858 = r47854 / r47857;
return r47858;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r47859 = x_re;
double r47860 = y_re;
double r47861 = r47859 * r47860;
double r47862 = x_im;
double r47863 = y_im;
double r47864 = r47862 * r47863;
double r47865 = r47861 + r47864;
double r47866 = r47860 * r47860;
double r47867 = r47863 * r47863;
double r47868 = r47866 + r47867;
double r47869 = r47865 / r47868;
double r47870 = 4.7371223555374217e+285;
bool r47871 = r47869 <= r47870;
double r47872 = sqrt(r47868);
double r47873 = r47865 / r47872;
double r47874 = r47873 / r47872;
double r47875 = -r47859;
double r47876 = r47875 / r47872;
double r47877 = r47871 ? r47874 : r47876;
return r47877;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) < 4.7371223555374217e+285Initial program 13.7
rmApplied add-sqr-sqrt13.7
Applied associate-/r*13.6
if 4.7371223555374217e+285 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 62.6
rmApplied add-sqr-sqrt62.7
Applied associate-/r*62.6
Taylor expanded around -inf 60.2
Simplified60.2
Final simplification25.1
herbie shell --seed 2019323
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, real part"
:precision binary64
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))