\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 -5.457377104622505852467015767494503842035 \cdot 10^{208}:\\
\;\;\;\;\frac{-1 \cdot x.im}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{elif}\;y.re \le 1.098050593933298912479119802869378133859 \cdot 10^{-16}:\\
\;\;\;\;\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{elif}\;y.re \le 1.368280955057290886281182593174139313509 \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{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 r53973 = x_im;
double r53974 = y_re;
double r53975 = r53973 * r53974;
double r53976 = x_re;
double r53977 = y_im;
double r53978 = r53976 * r53977;
double r53979 = r53975 - r53978;
double r53980 = r53974 * r53974;
double r53981 = r53977 * r53977;
double r53982 = r53980 + r53981;
double r53983 = r53979 / r53982;
return r53983;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r53984 = y_re;
double r53985 = -5.457377104622506e+208;
bool r53986 = r53984 <= r53985;
double r53987 = -1.0;
double r53988 = x_im;
double r53989 = r53987 * r53988;
double r53990 = y_im;
double r53991 = hypot(r53984, r53990);
double r53992 = 1.0;
double r53993 = r53991 * r53992;
double r53994 = r53989 / r53993;
double r53995 = 1.0980505939332989e-16;
bool r53996 = r53984 <= r53995;
double r53997 = r53988 * r53984;
double r53998 = x_re;
double r53999 = r53998 * r53990;
double r54000 = r53997 - r53999;
double r54001 = r54000 / r53991;
double r54002 = r54001 / r53993;
double r54003 = 1.368280955057291e+154;
bool r54004 = r53984 <= r54003;
double r54005 = r53990 * r53990;
double r54006 = fma(r53984, r53984, r54005);
double r54007 = r54006 / r53984;
double r54008 = r53988 / r54007;
double r54009 = r54006 / r53990;
double r54010 = r53998 / r54009;
double r54011 = r54008 - r54010;
double r54012 = r53988 / r53993;
double r54013 = r54004 ? r54011 : r54012;
double r54014 = r53996 ? r54002 : r54013;
double r54015 = r53986 ? r53994 : r54014;
return r54015;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.re < -5.457377104622506e+208Initial program 42.4
rmApplied add-sqr-sqrt42.4
Applied *-un-lft-identity42.4
Applied times-frac42.4
Simplified42.4
Simplified31.4
rmApplied associate-*l/31.3
Simplified31.3
Taylor expanded around -inf 10.1
if -5.457377104622506e+208 < y.re < 1.0980505939332989e-16Initial program 22.0
rmApplied add-sqr-sqrt22.0
Applied *-un-lft-identity22.0
Applied times-frac22.0
Simplified22.0
Simplified13.6
rmApplied associate-*l/13.5
Simplified13.5
if 1.0980505939332989e-16 < y.re < 1.368280955057291e+154Initial program 18.9
rmApplied div-sub18.9
Simplified13.3
Simplified12.5
if 1.368280955057291e+154 < y.re Initial program 45.0
rmApplied add-sqr-sqrt45.0
Applied *-un-lft-identity45.0
Applied times-frac45.0
Simplified45.0
Simplified27.9
rmApplied associate-*l/27.9
Simplified27.9
Taylor expanded around inf 14.6
Final simplification13.2
herbie shell --seed 2020002 +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))))