\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 5.290220499438646573779156255085041511729 \cdot 10^{298}:\\
\;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot x.re\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r39139 = x_re;
double r39140 = y_re;
double r39141 = r39139 * r39140;
double r39142 = x_im;
double r39143 = y_im;
double r39144 = r39142 * r39143;
double r39145 = r39141 + r39144;
double r39146 = r39140 * r39140;
double r39147 = r39143 * r39143;
double r39148 = r39146 + r39147;
double r39149 = r39145 / r39148;
return r39149;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r39150 = x_re;
double r39151 = y_re;
double r39152 = r39150 * r39151;
double r39153 = x_im;
double r39154 = y_im;
double r39155 = r39153 * r39154;
double r39156 = r39152 + r39155;
double r39157 = r39151 * r39151;
double r39158 = r39154 * r39154;
double r39159 = r39157 + r39158;
double r39160 = r39156 / r39159;
double r39161 = 5.290220499438647e+298;
bool r39162 = r39160 <= r39161;
double r39163 = -1.0;
double r39164 = sqrt(r39159);
double r39165 = r39163 / r39164;
double r39166 = r39165 * r39150;
double r39167 = r39162 ? r39160 : r39166;
return r39167;
}



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))) < 5.290220499438647e+298Initial program 14.4
rmApplied pow114.4
if 5.290220499438647e+298 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.4
rmApplied add-sqr-sqrt63.4
Applied *-un-lft-identity63.4
Applied times-frac63.4
Taylor expanded around -inf 60.3
Simplified60.3
Final simplification25.4
herbie shell --seed 2019304
(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))))