\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 -1.300179201415138562389146100214075083549 \cdot 10^{53}:\\
\;\;\;\;-\frac{x.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{y.im \cdot y.im + y.re \cdot y.re}{x.re \cdot y.re + x.im \cdot y.im}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r43963 = x_re;
double r43964 = y_re;
double r43965 = r43963 * r43964;
double r43966 = x_im;
double r43967 = y_im;
double r43968 = r43966 * r43967;
double r43969 = r43965 + r43968;
double r43970 = r43964 * r43964;
double r43971 = r43967 * r43967;
double r43972 = r43970 + r43971;
double r43973 = r43969 / r43972;
return r43973;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r43974 = y_im;
double r43975 = -1.3001792014151386e+53;
bool r43976 = r43974 <= r43975;
double r43977 = x_im;
double r43978 = r43974 * r43974;
double r43979 = y_re;
double r43980 = r43979 * r43979;
double r43981 = r43978 + r43980;
double r43982 = sqrt(r43981);
double r43983 = r43977 / r43982;
double r43984 = -r43983;
double r43985 = 1.0;
double r43986 = x_re;
double r43987 = r43986 * r43979;
double r43988 = r43977 * r43974;
double r43989 = r43987 + r43988;
double r43990 = r43981 / r43989;
double r43991 = r43985 / r43990;
double r43992 = r43976 ? r43984 : r43991;
return r43992;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < -1.3001792014151386e+53Initial program 35.6
rmApplied add-sqr-sqrt35.6
Applied associate-/r*35.6
Simplified35.6
Taylor expanded around -inf 36.7
Simplified36.7
if -1.3001792014151386e+53 < y.im Initial program 23.1
rmApplied add-sqr-sqrt23.1
Applied associate-/r*23.1
Simplified23.1
rmApplied *-un-lft-identity23.1
Applied sqrt-prod23.1
Applied *-un-lft-identity23.1
Applied times-frac23.1
Applied associate-/l*23.3
Simplified23.3
Final simplification26.2
herbie shell --seed 2019194
(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))))