\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.149100964280641300340745429976416575497 \cdot 10^{52}:\\
\;\;\;\;\frac{-x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.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 r2966408 = x_re;
double r2966409 = y_re;
double r2966410 = r2966408 * r2966409;
double r2966411 = x_im;
double r2966412 = y_im;
double r2966413 = r2966411 * r2966412;
double r2966414 = r2966410 + r2966413;
double r2966415 = r2966409 * r2966409;
double r2966416 = r2966412 * r2966412;
double r2966417 = r2966415 + r2966416;
double r2966418 = r2966414 / r2966417;
return r2966418;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r2966419 = y_re;
double r2966420 = -1.1491009642806413e+52;
bool r2966421 = r2966419 <= r2966420;
double r2966422 = x_re;
double r2966423 = -r2966422;
double r2966424 = r2966419 * r2966419;
double r2966425 = y_im;
double r2966426 = r2966425 * r2966425;
double r2966427 = r2966424 + r2966426;
double r2966428 = sqrt(r2966427);
double r2966429 = r2966423 / r2966428;
double r2966430 = x_im;
double r2966431 = r2966430 * r2966425;
double r2966432 = r2966422 * r2966419;
double r2966433 = r2966431 + r2966432;
double r2966434 = r2966433 / r2966428;
double r2966435 = r2966434 / r2966428;
double r2966436 = r2966421 ? r2966429 : r2966435;
return r2966436;
}



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.1491009642806413e+52Initial program 37.6
rmApplied add-sqr-sqrt37.6
Applied associate-/r*37.5
Taylor expanded around -inf 38.0
Simplified38.0
if -1.1491009642806413e+52 < y.re Initial program 23.6
rmApplied add-sqr-sqrt23.6
Applied associate-/r*23.5
Final simplification26.7
herbie shell --seed 2019170
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, real part"
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))