\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 4.737122355537421671534518653596175011386 \cdot 10^{285}:\\
\;\;\;\;\frac{\frac{x.re \cdot y.re + x.im \cdot y.im}{\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.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 r55544 = x_re;
double r55545 = y_re;
double r55546 = r55544 * r55545;
double r55547 = x_im;
double r55548 = y_im;
double r55549 = r55547 * r55548;
double r55550 = r55546 + r55549;
double r55551 = r55545 * r55545;
double r55552 = r55548 * r55548;
double r55553 = r55551 + r55552;
double r55554 = r55550 / r55553;
return r55554;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r55555 = x_re;
double r55556 = y_re;
double r55557 = r55555 * r55556;
double r55558 = x_im;
double r55559 = y_im;
double r55560 = r55558 * r55559;
double r55561 = r55557 + r55560;
double r55562 = r55556 * r55556;
double r55563 = r55559 * r55559;
double r55564 = r55562 + r55563;
double r55565 = r55561 / r55564;
double r55566 = 4.7371223555374217e+285;
bool r55567 = r55565 <= r55566;
double r55568 = sqrt(r55564);
double r55569 = r55561 / r55568;
double r55570 = r55569 / r55568;
double r55571 = -r55555;
double r55572 = r55571 / r55568;
double r55573 = r55567 ? r55570 : r55572;
return r55573;
}



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))) < 4.7371223555374217e+285Initial program 13.7
rmApplied add-sqr-sqrt13.7
Applied associate-/r*13.6
if 4.7371223555374217e+285 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 62.6
rmApplied add-sqr-sqrt62.7
Applied associate-/r*62.6
Taylor expanded around -inf 60.2
Simplified60.2
Final simplification25.1
herbie shell --seed 2019323
(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))))