\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 r71427 = x_re;
double r71428 = y_re;
double r71429 = r71427 * r71428;
double r71430 = x_im;
double r71431 = y_im;
double r71432 = r71430 * r71431;
double r71433 = r71429 + r71432;
double r71434 = r71428 * r71428;
double r71435 = r71431 * r71431;
double r71436 = r71434 + r71435;
double r71437 = r71433 / r71436;
return r71437;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r71438 = y_re;
double r71439 = 1.4473657936297032e+65;
bool r71440 = r71438 <= r71439;
double r71441 = x_re;
double r71442 = r71441 * r71438;
double r71443 = x_im;
double r71444 = y_im;
double r71445 = r71443 * r71444;
double r71446 = r71442 + r71445;
double r71447 = r71438 * r71438;
double r71448 = r71444 * r71444;
double r71449 = r71447 + r71448;
double r71450 = r71446 / r71449;
double r71451 = sqrt(r71449);
double r71452 = r71441 / r71451;
double r71453 = r71440 ? r71450 : r71452;
return r71453;
}



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