\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\begin{array}{l}
\mathbf{if}\;y.re \le -6.4031543623445702 \cdot 10^{213}:\\
\;\;\;\;\frac{-1 \cdot x.im}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{elif}\;y.re \le 7.51325573675878584 \cdot 10^{136}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \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.im}{\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 r66003 = x_im;
double r66004 = y_re;
double r66005 = r66003 * r66004;
double r66006 = x_re;
double r66007 = y_im;
double r66008 = r66006 * r66007;
double r66009 = r66005 - r66008;
double r66010 = r66004 * r66004;
double r66011 = r66007 * r66007;
double r66012 = r66010 + r66011;
double r66013 = r66009 / r66012;
return r66013;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r66014 = y_re;
double r66015 = -6.40315436234457e+213;
bool r66016 = r66014 <= r66015;
double r66017 = -1.0;
double r66018 = x_im;
double r66019 = r66017 * r66018;
double r66020 = y_im;
double r66021 = hypot(r66014, r66020);
double r66022 = 1.0;
double r66023 = r66021 * r66022;
double r66024 = r66019 / r66023;
double r66025 = 7.513255736758786e+136;
bool r66026 = r66014 <= r66025;
double r66027 = r66018 * r66014;
double r66028 = x_re;
double r66029 = r66028 * r66020;
double r66030 = r66027 - r66029;
double r66031 = r66030 / r66021;
double r66032 = r66031 / r66023;
double r66033 = r66018 / r66023;
double r66034 = r66026 ? r66032 : r66033;
double r66035 = r66016 ? r66024 : r66034;
return r66035;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -6.40315436234457e+213Initial program 41.9
rmApplied add-sqr-sqrt41.9
Applied *-un-lft-identity41.9
Applied times-frac41.9
Simplified41.9
Simplified31.5
rmApplied associate-*l/31.5
Simplified31.5
Taylor expanded around -inf 10.7
if -6.40315436234457e+213 < y.re < 7.513255736758786e+136Initial program 21.9
rmApplied add-sqr-sqrt21.9
Applied *-un-lft-identity21.9
Applied times-frac21.9
Simplified21.9
Simplified13.4
rmApplied associate-*l/13.2
Simplified13.2
if 7.513255736758786e+136 < y.re Initial program 43.5
rmApplied add-sqr-sqrt43.5
Applied *-un-lft-identity43.5
Applied times-frac43.5
Simplified43.5
Simplified28.7
rmApplied associate-*l/28.7
Simplified28.7
Taylor expanded around inf 14.3
Final simplification13.2
herbie shell --seed 2020034 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, imaginary part"
:precision binary64
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))