\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 r47806 = x_re;
double r47807 = y_re;
double r47808 = r47806 * r47807;
double r47809 = x_im;
double r47810 = y_im;
double r47811 = r47809 * r47810;
double r47812 = r47808 + r47811;
double r47813 = r47807 * r47807;
double r47814 = r47810 * r47810;
double r47815 = r47813 + r47814;
double r47816 = r47812 / r47815;
return r47816;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r47817 = x_re;
double r47818 = y_re;
double r47819 = r47817 * r47818;
double r47820 = x_im;
double r47821 = y_im;
double r47822 = r47820 * r47821;
double r47823 = r47819 + r47822;
double r47824 = r47818 * r47818;
double r47825 = r47821 * r47821;
double r47826 = r47824 + r47825;
double r47827 = r47823 / r47826;
double r47828 = 4.7371223555374217e+285;
bool r47829 = r47827 <= r47828;
double r47830 = sqrt(r47826);
double r47831 = r47823 / r47830;
double r47832 = r47831 / r47830;
double r47833 = -r47817;
double r47834 = r47833 / r47830;
double r47835 = r47829 ? r47832 : r47834;
return r47835;
}



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))))