\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 3.318211213550137477706442015578382060034 \cdot 10^{283}:\\
\;\;\;\;\frac{\frac{1}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{x.re \cdot y.re + x.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1 \cdot 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 r140881 = x_re;
double r140882 = y_re;
double r140883 = r140881 * r140882;
double r140884 = x_im;
double r140885 = y_im;
double r140886 = r140884 * r140885;
double r140887 = r140883 + r140886;
double r140888 = r140882 * r140882;
double r140889 = r140885 * r140885;
double r140890 = r140888 + r140889;
double r140891 = r140887 / r140890;
return r140891;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r140892 = x_re;
double r140893 = y_re;
double r140894 = r140892 * r140893;
double r140895 = x_im;
double r140896 = y_im;
double r140897 = r140895 * r140896;
double r140898 = r140894 + r140897;
double r140899 = r140893 * r140893;
double r140900 = r140896 * r140896;
double r140901 = r140899 + r140900;
double r140902 = r140898 / r140901;
double r140903 = 3.3182112135501375e+283;
bool r140904 = r140902 <= r140903;
double r140905 = 1.0;
double r140906 = sqrt(r140901);
double r140907 = r140906 / r140898;
double r140908 = r140905 / r140907;
double r140909 = r140908 / r140906;
double r140910 = -1.0;
double r140911 = r140910 * r140892;
double r140912 = r140911 / r140906;
double r140913 = r140904 ? r140909 : r140912;
return r140913;
}



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))) < 3.3182112135501375e+283Initial program 14.3
rmApplied add-sqr-sqrt14.3
Applied associate-/r*14.3
rmApplied clear-num14.3
if 3.3182112135501375e+283 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 62.6
rmApplied add-sqr-sqrt62.6
Applied associate-/r*62.6
Taylor expanded around -inf 60.3
Final simplification25.8
herbie shell --seed 2019322
(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))))