\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 8.757218044757217587065948698275685768631 \cdot 10^{298}:\\
\;\;\;\;\frac{\left(x.re \cdot y.re + x.im \cdot y.im\right) \cdot \frac{1}{\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.im}{\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 r47606 = x_re;
double r47607 = y_re;
double r47608 = r47606 * r47607;
double r47609 = x_im;
double r47610 = y_im;
double r47611 = r47609 * r47610;
double r47612 = r47608 + r47611;
double r47613 = r47607 * r47607;
double r47614 = r47610 * r47610;
double r47615 = r47613 + r47614;
double r47616 = r47612 / r47615;
return r47616;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r47617 = x_re;
double r47618 = y_re;
double r47619 = r47617 * r47618;
double r47620 = x_im;
double r47621 = y_im;
double r47622 = r47620 * r47621;
double r47623 = r47619 + r47622;
double r47624 = r47618 * r47618;
double r47625 = r47621 * r47621;
double r47626 = r47624 + r47625;
double r47627 = r47623 / r47626;
double r47628 = 8.757218044757218e+298;
bool r47629 = r47627 <= r47628;
double r47630 = 1.0;
double r47631 = sqrt(r47626);
double r47632 = r47630 / r47631;
double r47633 = r47623 * r47632;
double r47634 = r47633 / r47631;
double r47635 = r47620 / r47631;
double r47636 = r47629 ? r47634 : r47635;
return r47636;
}



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))) < 8.757218044757218e+298Initial program 14.0
rmApplied add-sqr-sqrt14.1
Applied associate-/r*14.0
rmApplied div-inv14.0
if 8.757218044757218e+298 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.6
rmApplied add-sqr-sqrt63.6
Applied associate-/r*63.6
Taylor expanded around 0 60.6
Final simplification25.2
herbie shell --seed 2019303
(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))))