\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 -2.5095625752469799 \cdot 10^{113}:\\
\;\;\;\;\frac{-1 \cdot x.im}{\mathsf{hypot}\left(y.re, y.im\right)}\\
\mathbf{elif}\;y.re \le 1.04610986578791549 \cdot 10^{-126}:\\
\;\;\;\;\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)}\\
\mathbf{elif}\;y.re \le 4.02564099829727292 \cdot 10^{-53}:\\
\;\;\;\;\frac{x.im}{\frac{\mathsf{fma}\left(y.re, y.re, y.im \cdot y.im\right)}{y.re}} - \frac{x.re}{\frac{\mathsf{fma}\left(y.re, y.re, y.im \cdot y.im\right)}{y.im}}\\
\mathbf{elif}\;y.re \le 2.14277106081791793 \cdot 10^{130}:\\
\;\;\;\;\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)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{\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 r64910 = x_im;
double r64911 = y_re;
double r64912 = r64910 * r64911;
double r64913 = x_re;
double r64914 = y_im;
double r64915 = r64913 * r64914;
double r64916 = r64912 - r64915;
double r64917 = r64911 * r64911;
double r64918 = r64914 * r64914;
double r64919 = r64917 + r64918;
double r64920 = r64916 / r64919;
return r64920;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r64921 = y_re;
double r64922 = -2.50956257524698e+113;
bool r64923 = r64921 <= r64922;
double r64924 = -1.0;
double r64925 = x_im;
double r64926 = r64924 * r64925;
double r64927 = y_im;
double r64928 = hypot(r64921, r64927);
double r64929 = r64926 / r64928;
double r64930 = 1.0461098657879155e-126;
bool r64931 = r64921 <= r64930;
double r64932 = r64925 * r64921;
double r64933 = x_re;
double r64934 = r64933 * r64927;
double r64935 = r64932 - r64934;
double r64936 = r64935 / r64928;
double r64937 = r64936 / r64928;
double r64938 = 4.025640998297273e-53;
bool r64939 = r64921 <= r64938;
double r64940 = r64927 * r64927;
double r64941 = fma(r64921, r64921, r64940);
double r64942 = r64941 / r64921;
double r64943 = r64925 / r64942;
double r64944 = r64941 / r64927;
double r64945 = r64933 / r64944;
double r64946 = r64943 - r64945;
double r64947 = 2.142771060817918e+130;
bool r64948 = r64921 <= r64947;
double r64949 = r64925 / r64928;
double r64950 = r64948 ? r64937 : r64949;
double r64951 = r64939 ? r64946 : r64950;
double r64952 = r64931 ? r64937 : r64951;
double r64953 = r64923 ? r64929 : r64952;
return r64953;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.re < -2.50956257524698e+113Initial program 42.1
rmApplied add-sqr-sqrt42.1
Applied *-un-lft-identity42.1
Applied times-frac42.1
Simplified42.1
Simplified28.2
rmApplied associate-*r/28.2
Simplified28.1
Taylor expanded around -inf 16.2
if -2.50956257524698e+113 < y.re < 1.0461098657879155e-126 or 4.025640998297273e-53 < y.re < 2.142771060817918e+130Initial program 18.8
rmApplied add-sqr-sqrt18.8
Applied *-un-lft-identity18.8
Applied times-frac18.8
Simplified18.8
Simplified12.4
rmApplied associate-*r/12.4
Simplified12.3
if 1.0461098657879155e-126 < y.re < 4.025640998297273e-53Initial program 13.8
rmApplied div-sub13.8
Simplified13.3
Simplified11.0
if 2.142771060817918e+130 < y.re Initial program 43.1
rmApplied add-sqr-sqrt43.1
Applied *-un-lft-identity43.1
Applied times-frac43.1
Simplified43.1
Simplified27.8
rmApplied associate-*r/27.8
Simplified27.7
Taylor expanded around inf 14.6
Final simplification13.2
herbie shell --seed 2020049 +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))))