\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 -4.28661918211577314 \cdot 10^{139}:\\
\;\;\;\;\frac{-1 \cdot x.im}{\mathsf{hypot}\left(y.re, y.im\right)}\\
\mathbf{elif}\;y.re \le -1.01190047403502618 \cdot 10^{-272}:\\
\;\;\;\;\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 6.80234349703359644 \cdot 10^{174}:\\
\;\;\;\;\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{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 r63516 = x_im;
double r63517 = y_re;
double r63518 = r63516 * r63517;
double r63519 = x_re;
double r63520 = y_im;
double r63521 = r63519 * r63520;
double r63522 = r63518 - r63521;
double r63523 = r63517 * r63517;
double r63524 = r63520 * r63520;
double r63525 = r63523 + r63524;
double r63526 = r63522 / r63525;
return r63526;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r63527 = y_re;
double r63528 = -4.286619182115773e+139;
bool r63529 = r63527 <= r63528;
double r63530 = -1.0;
double r63531 = x_im;
double r63532 = r63530 * r63531;
double r63533 = y_im;
double r63534 = hypot(r63527, r63533);
double r63535 = r63532 / r63534;
double r63536 = -1.0119004740350262e-272;
bool r63537 = r63527 <= r63536;
double r63538 = r63533 * r63533;
double r63539 = fma(r63527, r63527, r63538);
double r63540 = r63539 / r63527;
double r63541 = r63531 / r63540;
double r63542 = x_re;
double r63543 = r63539 / r63533;
double r63544 = r63542 / r63543;
double r63545 = r63541 - r63544;
double r63546 = 6.8023434970335964e+174;
bool r63547 = r63527 <= r63546;
double r63548 = 1.0;
double r63549 = r63531 * r63527;
double r63550 = r63542 * r63533;
double r63551 = r63549 - r63550;
double r63552 = r63534 / r63551;
double r63553 = r63548 / r63552;
double r63554 = r63553 / r63534;
double r63555 = r63531 / r63534;
double r63556 = r63547 ? r63554 : r63555;
double r63557 = r63537 ? r63545 : r63556;
double r63558 = r63529 ? r63535 : r63557;
return r63558;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.re < -4.286619182115773e+139Initial program 43.4
rmApplied add-sqr-sqrt43.4
Applied *-un-lft-identity43.4
Applied times-frac43.4
Simplified43.4
Simplified27.9
rmApplied associate-*r/27.9
Simplified27.8
Taylor expanded around -inf 14.8
if -4.286619182115773e+139 < y.re < -1.0119004740350262e-272Initial program 19.0
rmApplied div-sub19.0
Simplified17.6
Simplified15.7
if -1.0119004740350262e-272 < y.re < 6.8023434970335964e+174Initial program 21.0
rmApplied add-sqr-sqrt21.0
Applied *-un-lft-identity21.0
Applied times-frac21.0
Simplified21.0
Simplified12.9
rmApplied associate-*r/12.9
Simplified12.8
rmApplied clear-num12.9
if 6.8023434970335964e+174 < y.re Initial program 43.4
rmApplied add-sqr-sqrt43.4
Applied *-un-lft-identity43.4
Applied times-frac43.4
Simplified43.4
Simplified29.1
rmApplied associate-*r/29.1
Simplified29.0
Taylor expanded around inf 11.8
Final simplification14.0
herbie shell --seed 2020062 +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))))