\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.re \le 1.44736579362970321 \cdot 10^{65}:\\
\;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{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 r63442 = x_re;
double r63443 = y_re;
double r63444 = r63442 * r63443;
double r63445 = x_im;
double r63446 = y_im;
double r63447 = r63445 * r63446;
double r63448 = r63444 + r63447;
double r63449 = r63443 * r63443;
double r63450 = r63446 * r63446;
double r63451 = r63449 + r63450;
double r63452 = r63448 / r63451;
return r63452;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r63453 = y_re;
double r63454 = 1.4473657936297032e+65;
bool r63455 = r63453 <= r63454;
double r63456 = x_re;
double r63457 = r63456 * r63453;
double r63458 = x_im;
double r63459 = y_im;
double r63460 = r63458 * r63459;
double r63461 = r63457 + r63460;
double r63462 = r63453 * r63453;
double r63463 = r63459 * r63459;
double r63464 = r63462 + r63463;
double r63465 = r63461 / r63464;
double r63466 = sqrt(r63464);
double r63467 = r63456 / r63466;
double r63468 = r63455 ? r63465 : r63467;
return r63468;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < 1.4473657936297032e+65Initial program 23.4
if 1.4473657936297032e+65 < y.re Initial program 37.2
rmApplied add-sqr-sqrt37.2
Applied associate-/r*37.2
Taylor expanded around inf 37.2
Final simplification26.3
herbie shell --seed 2020047
(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))))