\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.re \cdot x.re + y.im \cdot x.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 r76026 = x_re;
double r76027 = y_re;
double r76028 = r76026 * r76027;
double r76029 = x_im;
double r76030 = y_im;
double r76031 = r76029 * r76030;
double r76032 = r76028 + r76031;
double r76033 = r76027 * r76027;
double r76034 = r76030 * r76030;
double r76035 = r76033 + r76034;
double r76036 = r76032 / r76035;
return r76036;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r76037 = x_re;
double r76038 = y_re;
double r76039 = r76037 * r76038;
double r76040 = x_im;
double r76041 = y_im;
double r76042 = r76040 * r76041;
double r76043 = r76039 + r76042;
double r76044 = r76038 * r76038;
double r76045 = r76041 * r76041;
double r76046 = r76044 + r76045;
double r76047 = r76043 / r76046;
double r76048 = 3.723435793259181e+232;
bool r76049 = r76047 <= r76048;
double r76050 = 1.0;
double r76051 = sqrt(r76046);
double r76052 = r76038 * r76037;
double r76053 = r76041 * r76040;
double r76054 = r76052 + r76053;
double r76055 = r76051 / r76054;
double r76056 = r76050 / r76055;
double r76057 = r76056 / r76051;
double r76058 = -r76037;
double r76059 = r76058 / r76051;
double r76060 = r76049 ? r76057 : r76059;
return r76060;
}



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