\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}\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 8.757218044757217587065948698275685768631 \cdot 10^{298}:\\
\;\;\;\;\frac{\left(x.re \cdot y.re + x.im \cdot y.im\right) \cdot \frac{1}{\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 r87342 = x_re;
double r87343 = y_re;
double r87344 = r87342 * r87343;
double r87345 = x_im;
double r87346 = y_im;
double r87347 = r87345 * r87346;
double r87348 = r87344 + r87347;
double r87349 = r87343 * r87343;
double r87350 = r87346 * r87346;
double r87351 = r87349 + r87350;
double r87352 = r87348 / r87351;
return r87352;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r87353 = x_re;
double r87354 = y_re;
double r87355 = r87353 * r87354;
double r87356 = x_im;
double r87357 = y_im;
double r87358 = r87356 * r87357;
double r87359 = r87355 + r87358;
double r87360 = r87354 * r87354;
double r87361 = r87357 * r87357;
double r87362 = r87360 + r87361;
double r87363 = r87359 / r87362;
double r87364 = 8.757218044757218e+298;
bool r87365 = r87363 <= r87364;
double r87366 = 1.0;
double r87367 = sqrt(r87362);
double r87368 = r87366 / r87367;
double r87369 = r87359 * r87368;
double r87370 = r87369 / r87367;
double r87371 = r87356 / r87367;
double r87372 = r87365 ? r87370 : r87371;
return r87372;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) < 8.757218044757218e+298Initial program 14.0
rmApplied add-sqr-sqrt14.1
Applied associate-/r*14.0
rmApplied div-inv14.0
if 8.757218044757218e+298 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.6
rmApplied add-sqr-sqrt63.6
Applied associate-/r*63.6
Taylor expanded around 0 60.6
Final simplification25.2
herbie shell --seed 2019303
(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))))