\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 r94252 = x_re;
double r94253 = y_re;
double r94254 = r94252 * r94253;
double r94255 = x_im;
double r94256 = y_im;
double r94257 = r94255 * r94256;
double r94258 = r94254 + r94257;
double r94259 = r94253 * r94253;
double r94260 = r94256 * r94256;
double r94261 = r94259 + r94260;
double r94262 = r94258 / r94261;
return r94262;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r94263 = x_re;
double r94264 = y_re;
double r94265 = r94263 * r94264;
double r94266 = x_im;
double r94267 = y_im;
double r94268 = r94266 * r94267;
double r94269 = r94265 + r94268;
double r94270 = r94264 * r94264;
double r94271 = r94267 * r94267;
double r94272 = r94270 + r94271;
double r94273 = r94269 / r94272;
double r94274 = 8.757218044757218e+298;
bool r94275 = r94273 <= r94274;
double r94276 = 1.0;
double r94277 = sqrt(r94272);
double r94278 = r94276 / r94277;
double r94279 = r94269 * r94278;
double r94280 = r94279 / r94277;
double r94281 = r94266 / r94277;
double r94282 = r94275 ? r94280 : r94281;
return r94282;
}



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