\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}\;x.im \le -1.83333069166780128 \cdot 10^{209}:\\
\;\;\;\;\frac{x.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{1}{\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 r109195 = x_re;
double r109196 = y_re;
double r109197 = r109195 * r109196;
double r109198 = x_im;
double r109199 = y_im;
double r109200 = r109198 * r109199;
double r109201 = r109197 + r109200;
double r109202 = r109196 * r109196;
double r109203 = r109199 * r109199;
double r109204 = r109202 + r109203;
double r109205 = r109201 / r109204;
return r109205;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r109206 = x_im;
double r109207 = -1.8333306916678013e+209;
bool r109208 = r109206 <= r109207;
double r109209 = y_re;
double r109210 = r109209 * r109209;
double r109211 = y_im;
double r109212 = r109211 * r109211;
double r109213 = r109210 + r109212;
double r109214 = sqrt(r109213);
double r109215 = r109206 / r109214;
double r109216 = x_re;
double r109217 = r109216 * r109209;
double r109218 = r109206 * r109211;
double r109219 = r109217 + r109218;
double r109220 = r109219 / r109214;
double r109221 = 1.0;
double r109222 = r109221 / r109214;
double r109223 = r109220 * r109222;
double r109224 = r109208 ? r109215 : r109223;
return r109224;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.im < -1.8333306916678013e+209Initial program 40.6
rmApplied add-sqr-sqrt40.6
Applied associate-/r*40.6
Taylor expanded around 0 52.0
if -1.8333306916678013e+209 < x.im Initial program 25.2
rmApplied add-sqr-sqrt25.2
Applied associate-/r*25.1
rmApplied div-inv25.2
Final simplification27.2
herbie shell --seed 2020056
(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))))