\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}\;y.im \le 7.389276722766793942363821003152316862188 \cdot 10^{104}:\\
\;\;\;\;\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.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 r66534 = x_re;
double r66535 = y_re;
double r66536 = r66534 * r66535;
double r66537 = x_im;
double r66538 = y_im;
double r66539 = r66537 * r66538;
double r66540 = r66536 + r66539;
double r66541 = r66535 * r66535;
double r66542 = r66538 * r66538;
double r66543 = r66541 + r66542;
double r66544 = r66540 / r66543;
return r66544;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r66545 = y_im;
double r66546 = 7.389276722766794e+104;
bool r66547 = r66545 <= r66546;
double r66548 = x_re;
double r66549 = y_re;
double r66550 = r66548 * r66549;
double r66551 = x_im;
double r66552 = r66551 * r66545;
double r66553 = r66550 + r66552;
double r66554 = r66549 * r66549;
double r66555 = r66545 * r66545;
double r66556 = r66554 + r66555;
double r66557 = sqrt(r66556);
double r66558 = r66553 / r66557;
double r66559 = r66558 / r66557;
double r66560 = r66551 / r66557;
double r66561 = r66547 ? r66559 : r66560;
return r66561;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < 7.389276722766794e+104Initial program 23.2
rmApplied add-sqr-sqrt23.2
Applied associate-/r*23.2
if 7.389276722766794e+104 < y.im Initial program 39.2
rmApplied add-sqr-sqrt39.2
Applied associate-/r*39.2
Taylor expanded around 0 38.6
Final simplification26.0
herbie shell --seed 2019326
(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))))