\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.im \le -1.33199508007579152 \cdot 10^{154}:\\
\;\;\;\;\frac{\left(x.im \cdot y.re - x.re \cdot y.im\right) \cdot \frac{1}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right)}\\
\mathbf{elif}\;y.im \le -0.29009036449311909:\\
\;\;\;\;\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.im \le 1.37238418162211356 \cdot 10^{-46}:\\
\;\;\;\;\frac{\frac{1}{\frac{\mathsf{hypot}\left(y.re, y.im\right)}{x.im \cdot y.re - x.re \cdot y.im}}}{\mathsf{hypot}\left(y.re, y.im\right)}\\
\mathbf{elif}\;y.im \le 1.24061954906872438 \cdot 10^{154}:\\
\;\;\;\;\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{else}:\\
\;\;\;\;\frac{-1 \cdot 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 r52852 = x_im;
double r52853 = y_re;
double r52854 = r52852 * r52853;
double r52855 = x_re;
double r52856 = y_im;
double r52857 = r52855 * r52856;
double r52858 = r52854 - r52857;
double r52859 = r52853 * r52853;
double r52860 = r52856 * r52856;
double r52861 = r52859 + r52860;
double r52862 = r52858 / r52861;
return r52862;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r52863 = y_im;
double r52864 = -1.3319950800757915e+154;
bool r52865 = r52863 <= r52864;
double r52866 = x_im;
double r52867 = y_re;
double r52868 = r52866 * r52867;
double r52869 = x_re;
double r52870 = r52869 * r52863;
double r52871 = r52868 - r52870;
double r52872 = 1.0;
double r52873 = hypot(r52867, r52863);
double r52874 = r52872 / r52873;
double r52875 = r52871 * r52874;
double r52876 = r52875 / r52873;
double r52877 = -0.2900903644931191;
bool r52878 = r52863 <= r52877;
double r52879 = r52863 * r52863;
double r52880 = fma(r52867, r52867, r52879);
double r52881 = r52880 / r52867;
double r52882 = r52866 / r52881;
double r52883 = r52880 / r52863;
double r52884 = r52869 / r52883;
double r52885 = r52882 - r52884;
double r52886 = 1.3723841816221136e-46;
bool r52887 = r52863 <= r52886;
double r52888 = r52873 / r52871;
double r52889 = r52872 / r52888;
double r52890 = r52889 / r52873;
double r52891 = 1.2406195490687244e+154;
bool r52892 = r52863 <= r52891;
double r52893 = -1.0;
double r52894 = r52893 * r52869;
double r52895 = r52894 / r52873;
double r52896 = r52892 ? r52885 : r52895;
double r52897 = r52887 ? r52890 : r52896;
double r52898 = r52878 ? r52885 : r52897;
double r52899 = r52865 ? r52876 : r52898;
return r52899;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.im < -1.3319950800757915e+154Initial program 44.3
rmApplied add-sqr-sqrt44.3
Applied *-un-lft-identity44.3
Applied times-frac44.3
Simplified44.3
Simplified28.6
rmApplied associate-*r/28.6
Simplified28.6
rmApplied div-inv28.6
if -1.3319950800757915e+154 < y.im < -0.2900903644931191 or 1.3723841816221136e-46 < y.im < 1.2406195490687244e+154Initial program 18.8
rmApplied div-sub18.8
Simplified18.3
Simplified12.9
if -0.2900903644931191 < y.im < 1.3723841816221136e-46Initial program 18.9
rmApplied add-sqr-sqrt18.9
Applied *-un-lft-identity18.9
Applied times-frac18.9
Simplified18.9
Simplified11.0
rmApplied associate-*r/11.0
Simplified10.9
rmApplied clear-num11.0
if 1.2406195490687244e+154 < y.im Initial program 45.2
rmApplied add-sqr-sqrt45.2
Applied *-un-lft-identity45.2
Applied times-frac45.2
Simplified45.2
Simplified29.7
rmApplied associate-*r/29.7
Simplified29.7
Taylor expanded around 0 13.4
Final simplification14.2
herbie shell --seed 2020003 +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))))