\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 r104453 = x_re;
double r104454 = y_re;
double r104455 = r104453 * r104454;
double r104456 = x_im;
double r104457 = y_im;
double r104458 = r104456 * r104457;
double r104459 = r104455 + r104458;
double r104460 = r104454 * r104454;
double r104461 = r104457 * r104457;
double r104462 = r104460 + r104461;
double r104463 = r104459 / r104462;
return r104463;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r104464 = y_im;
double r104465 = 7.389276722766794e+104;
bool r104466 = r104464 <= r104465;
double r104467 = x_re;
double r104468 = y_re;
double r104469 = r104467 * r104468;
double r104470 = x_im;
double r104471 = r104470 * r104464;
double r104472 = r104469 + r104471;
double r104473 = r104468 * r104468;
double r104474 = r104464 * r104464;
double r104475 = r104473 + r104474;
double r104476 = sqrt(r104475);
double r104477 = r104472 / r104476;
double r104478 = r104477 / r104476;
double r104479 = r104470 / r104476;
double r104480 = r104466 ? r104478 : r104479;
return r104480;
}



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