\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.im \cdot y.im + x.re \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} \le 8.391246277230149 \cdot 10^{+244}:\\
\;\;\;\;\frac{x.im \cdot y.im + x.re \cdot y.re}{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 r2145144 = x_re;
double r2145145 = y_re;
double r2145146 = r2145144 * r2145145;
double r2145147 = x_im;
double r2145148 = y_im;
double r2145149 = r2145147 * r2145148;
double r2145150 = r2145146 + r2145149;
double r2145151 = r2145145 * r2145145;
double r2145152 = r2145148 * r2145148;
double r2145153 = r2145151 + r2145152;
double r2145154 = r2145150 / r2145153;
return r2145154;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r2145155 = x_im;
double r2145156 = y_im;
double r2145157 = r2145155 * r2145156;
double r2145158 = x_re;
double r2145159 = y_re;
double r2145160 = r2145158 * r2145159;
double r2145161 = r2145157 + r2145160;
double r2145162 = r2145159 * r2145159;
double r2145163 = r2145156 * r2145156;
double r2145164 = r2145162 + r2145163;
double r2145165 = r2145161 / r2145164;
double r2145166 = 8.391246277230149e+244;
bool r2145167 = r2145165 <= r2145166;
double r2145168 = -r2145158;
double r2145169 = sqrt(r2145164);
double r2145170 = r2145168 / r2145169;
double r2145171 = r2145167 ? r2145165 : r2145170;
return r2145171;
}



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.391246277230149e+244Initial program 14.2
if 8.391246277230149e+244 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 59.2
rmApplied add-sqr-sqrt59.2
Applied associate-/r*59.2
Taylor expanded around -inf 59.7
Simplified59.7
Final simplification26.3
herbie shell --seed 2019141
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, real part"
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))