\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 3.29064580259523516 \cdot 10^{293}:\\
\;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{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 r66238 = x_re;
double r66239 = y_re;
double r66240 = r66238 * r66239;
double r66241 = x_im;
double r66242 = y_im;
double r66243 = r66241 * r66242;
double r66244 = r66240 + r66243;
double r66245 = r66239 * r66239;
double r66246 = r66242 * r66242;
double r66247 = r66245 + r66246;
double r66248 = r66244 / r66247;
return r66248;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r66249 = x_re;
double r66250 = y_re;
double r66251 = r66249 * r66250;
double r66252 = x_im;
double r66253 = y_im;
double r66254 = r66252 * r66253;
double r66255 = r66251 + r66254;
double r66256 = r66250 * r66250;
double r66257 = r66253 * r66253;
double r66258 = r66256 + r66257;
double r66259 = r66255 / r66258;
double r66260 = 3.290645802595235e+293;
bool r66261 = r66259 <= r66260;
double r66262 = sqrt(r66258);
double r66263 = r66262 * r66262;
double r66264 = r66255 / r66263;
double r66265 = -r66249;
double r66266 = r66265 / r66262;
double r66267 = r66261 ? r66264 : r66266;
return r66267;
}



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))) < 3.290645802595235e+293Initial program 14.4
rmApplied add-sqr-sqrt14.4
if 3.290645802595235e+293 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.2
rmApplied add-sqr-sqrt63.2
Applied associate-/r*63.2
Taylor expanded around -inf 60.2
Simplified60.2
Final simplification25.7
herbie shell --seed 2020046
(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))))