\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 -7.72381449609585197339080432829350912947 \cdot 10^{66}:\\
\;\;\;\;\frac{-1 \cdot x.im}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{elif}\;y.re \le 3.210000869555314649690325264102980299442 \cdot 10^{117}:\\
\;\;\;\;\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 r65825 = x_im;
double r65826 = y_re;
double r65827 = r65825 * r65826;
double r65828 = x_re;
double r65829 = y_im;
double r65830 = r65828 * r65829;
double r65831 = r65827 - r65830;
double r65832 = r65826 * r65826;
double r65833 = r65829 * r65829;
double r65834 = r65832 + r65833;
double r65835 = r65831 / r65834;
return r65835;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r65836 = y_re;
double r65837 = -7.723814496095852e+66;
bool r65838 = r65836 <= r65837;
double r65839 = -1.0;
double r65840 = x_im;
double r65841 = r65839 * r65840;
double r65842 = y_im;
double r65843 = hypot(r65836, r65842);
double r65844 = 1.0;
double r65845 = r65843 * r65844;
double r65846 = r65841 / r65845;
double r65847 = 3.2100008695553146e+117;
bool r65848 = r65836 <= r65847;
double r65849 = r65840 * r65836;
double r65850 = x_re;
double r65851 = r65850 * r65842;
double r65852 = r65849 - r65851;
double r65853 = r65852 / r65843;
double r65854 = r65853 / r65845;
double r65855 = r65840 / r65845;
double r65856 = r65848 ? r65854 : r65855;
double r65857 = r65838 ? r65846 : r65856;
return r65857;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -7.723814496095852e+66Initial program 37.2
rmApplied add-sqr-sqrt37.2
Applied *-un-lft-identity37.2
Applied times-frac37.2
Simplified37.2
Simplified25.4
rmApplied associate-*l/25.4
Simplified25.4
Taylor expanded around -inf 18.0
if -7.723814496095852e+66 < y.re < 3.2100008695553146e+117Initial program 19.3
rmApplied add-sqr-sqrt19.3
Applied *-un-lft-identity19.3
Applied times-frac19.3
Simplified19.3
Simplified12.3
rmApplied associate-*l/12.2
Simplified12.2
if 3.2100008695553146e+117 < y.re Initial program 40.3
rmApplied add-sqr-sqrt40.3
Applied *-un-lft-identity40.3
Applied times-frac40.3
Simplified40.3
Simplified26.0
rmApplied associate-*l/26.0
Simplified26.0
Taylor expanded around inf 15.6
Final simplification13.9
herbie shell --seed 2019353 +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))))