\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 1.18802561241444503 \cdot 10^{166}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(x.re, y.re, x.im \cdot y.im\right)}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.re}{\mathsf{hypot}\left(y.re, y.im\right)}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r108005 = x_re;
double r108006 = y_re;
double r108007 = r108005 * r108006;
double r108008 = x_im;
double r108009 = y_im;
double r108010 = r108008 * r108009;
double r108011 = r108007 + r108010;
double r108012 = r108006 * r108006;
double r108013 = r108009 * r108009;
double r108014 = r108012 + r108013;
double r108015 = r108011 / r108014;
return r108015;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r108016 = y_re;
double r108017 = 1.188025612414445e+166;
bool r108018 = r108016 <= r108017;
double r108019 = x_re;
double r108020 = x_im;
double r108021 = y_im;
double r108022 = r108020 * r108021;
double r108023 = fma(r108019, r108016, r108022);
double r108024 = hypot(r108016, r108021);
double r108025 = r108023 / r108024;
double r108026 = r108025 / r108024;
double r108027 = r108019 / r108024;
double r108028 = r108018 ? r108026 : r108027;
return r108028;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.re < 1.188025612414445e+166Initial program 24.2
Simplified24.2
rmApplied add-sqr-sqrt24.2
Applied *-un-lft-identity24.2
Applied times-frac24.2
Simplified24.2
Simplified15.5
rmApplied *-un-lft-identity15.5
Applied associate-*l*15.5
Simplified15.3
if 1.188025612414445e+166 < y.re Initial program 46.1
Simplified46.1
rmApplied add-sqr-sqrt46.1
Applied *-un-lft-identity46.1
Applied times-frac46.1
Simplified46.1
Simplified30.2
rmApplied *-un-lft-identity30.2
Applied associate-*l*30.2
Simplified30.1
Taylor expanded around inf 13.9
Final simplification15.2
herbie shell --seed 2020042 +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))))