\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.re \le -2.15167370780975257 \cdot 10^{185}:\\
\;\;\;\;\frac{-1 \cdot x.re}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{elif}\;y.re \le 1.4191655951273249 \cdot 10^{147}:\\
\;\;\;\;\frac{\frac{x.re \cdot y.re + x.im \cdot y.im}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.re}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r103926 = x_re;
double r103927 = y_re;
double r103928 = r103926 * r103927;
double r103929 = x_im;
double r103930 = y_im;
double r103931 = r103929 * r103930;
double r103932 = r103928 + r103931;
double r103933 = r103927 * r103927;
double r103934 = r103930 * r103930;
double r103935 = r103933 + r103934;
double r103936 = r103932 / r103935;
return r103936;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r103937 = y_re;
double r103938 = -2.1516737078097526e+185;
bool r103939 = r103937 <= r103938;
double r103940 = -1.0;
double r103941 = x_re;
double r103942 = r103940 * r103941;
double r103943 = y_im;
double r103944 = hypot(r103937, r103943);
double r103945 = 1.0;
double r103946 = r103944 * r103945;
double r103947 = r103942 / r103946;
double r103948 = 1.4191655951273249e+147;
bool r103949 = r103937 <= r103948;
double r103950 = r103941 * r103937;
double r103951 = x_im;
double r103952 = r103951 * r103943;
double r103953 = r103950 + r103952;
double r103954 = r103953 / r103944;
double r103955 = r103954 / r103946;
double r103956 = r103941 / r103946;
double r103957 = r103949 ? r103955 : r103956;
double r103958 = r103939 ? r103947 : r103957;
return r103958;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -2.1516737078097526e+185Initial program 43.5
rmApplied add-sqr-sqrt43.5
Applied *-un-lft-identity43.5
Applied times-frac43.5
Simplified43.5
Simplified30.2
rmApplied associate-*r/30.1
Simplified30.1
Taylor expanded around -inf 12.0
if -2.1516737078097526e+185 < y.re < 1.4191655951273249e+147Initial program 20.6
rmApplied add-sqr-sqrt20.6
Applied *-un-lft-identity20.6
Applied times-frac20.6
Simplified20.6
Simplified13.2
rmApplied associate-*r/13.1
Simplified13.1
rmApplied fma-udef13.1
if 1.4191655951273249e+147 < y.re Initial program 44.8
rmApplied add-sqr-sqrt44.8
Applied *-un-lft-identity44.8
Applied times-frac44.8
Simplified44.8
Simplified27.8
rmApplied associate-*r/27.8
Simplified27.7
Taylor expanded around inf 14.7
Final simplification13.2
herbie shell --seed 2020062 +o rules:numerics
(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))))