\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}\;y.im \le 28148546215012511376658377374508777472:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(x.re, y.re, y.im \cdot x.im\right)}{\sqrt{\mathsf{fma}\left(y.im, y.im, y.re \cdot y.re\right)}}}{\sqrt{\mathsf{fma}\left(y.im, y.im, y.re \cdot y.re\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{\sqrt{\mathsf{fma}\left(y.im, y.im, y.re \cdot y.re\right)}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r2724806 = x_re;
double r2724807 = y_re;
double r2724808 = r2724806 * r2724807;
double r2724809 = x_im;
double r2724810 = y_im;
double r2724811 = r2724809 * r2724810;
double r2724812 = r2724808 + r2724811;
double r2724813 = r2724807 * r2724807;
double r2724814 = r2724810 * r2724810;
double r2724815 = r2724813 + r2724814;
double r2724816 = r2724812 / r2724815;
return r2724816;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r2724817 = y_im;
double r2724818 = 2.814854621501251e+37;
bool r2724819 = r2724817 <= r2724818;
double r2724820 = x_re;
double r2724821 = y_re;
double r2724822 = x_im;
double r2724823 = r2724817 * r2724822;
double r2724824 = fma(r2724820, r2724821, r2724823);
double r2724825 = r2724821 * r2724821;
double r2724826 = fma(r2724817, r2724817, r2724825);
double r2724827 = sqrt(r2724826);
double r2724828 = r2724824 / r2724827;
double r2724829 = r2724828 / r2724827;
double r2724830 = r2724822 / r2724827;
double r2724831 = r2724819 ? r2724829 : r2724830;
return r2724831;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.im < 2.814854621501251e+37Initial program 22.8
Simplified22.8
rmApplied add-sqr-sqrt22.8
Applied *-un-lft-identity22.8
Applied times-frac22.8
rmApplied associate-*l/22.7
if 2.814854621501251e+37 < y.im Initial program 35.3
Simplified35.3
rmApplied add-sqr-sqrt35.3
Applied associate-/r*35.3
Taylor expanded around 0 37.0
Final simplification26.2
herbie shell --seed 2019172 +o rules:numerics
(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))))