\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.7234357932591811 \cdot 10^{232}:\\
\;\;\;\;\frac{\frac{1}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.im \cdot x.im + y.re \cdot x.re}}}{\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 r59423 = x_re;
double r59424 = y_re;
double r59425 = r59423 * r59424;
double r59426 = x_im;
double r59427 = y_im;
double r59428 = r59426 * r59427;
double r59429 = r59425 + r59428;
double r59430 = r59424 * r59424;
double r59431 = r59427 * r59427;
double r59432 = r59430 + r59431;
double r59433 = r59429 / r59432;
return r59433;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r59434 = x_re;
double r59435 = y_re;
double r59436 = r59434 * r59435;
double r59437 = x_im;
double r59438 = y_im;
double r59439 = r59437 * r59438;
double r59440 = r59436 + r59439;
double r59441 = r59435 * r59435;
double r59442 = r59438 * r59438;
double r59443 = r59441 + r59442;
double r59444 = r59440 / r59443;
double r59445 = 3.723435793259181e+232;
bool r59446 = r59444 <= r59445;
double r59447 = 1.0;
double r59448 = sqrt(r59443);
double r59449 = r59438 * r59437;
double r59450 = r59435 * r59434;
double r59451 = r59449 + r59450;
double r59452 = r59448 / r59451;
double r59453 = r59447 / r59452;
double r59454 = r59453 / r59448;
double r59455 = -r59434;
double r59456 = r59455 / r59448;
double r59457 = r59446 ? r59454 : r59456;
return r59457;
}



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.723435793259181e+232Initial program 13.9
rmApplied add-sqr-sqrt13.9
Applied associate-/r*13.8
rmApplied clear-num13.8
Simplified13.8
if 3.723435793259181e+232 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 60.0
rmApplied add-sqr-sqrt60.0
Applied associate-/r*60.0
Taylor expanded around -inf 59.9
Simplified59.9
Final simplification25.8
herbie shell --seed 2020045
(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))))