\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.1577830516153349 \cdot 10^{135}:\\
\;\;\;\;\frac{-1 \cdot x.im}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{elif}\;y.re \le 1.09257836416405059 \cdot 10^{158}:\\
\;\;\;\;\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 r50556 = x_im;
double r50557 = y_re;
double r50558 = r50556 * r50557;
double r50559 = x_re;
double r50560 = y_im;
double r50561 = r50559 * r50560;
double r50562 = r50558 - r50561;
double r50563 = r50557 * r50557;
double r50564 = r50560 * r50560;
double r50565 = r50563 + r50564;
double r50566 = r50562 / r50565;
return r50566;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r50567 = y_re;
double r50568 = -5.157783051615335e+135;
bool r50569 = r50567 <= r50568;
double r50570 = -1.0;
double r50571 = x_im;
double r50572 = r50570 * r50571;
double r50573 = y_im;
double r50574 = hypot(r50567, r50573);
double r50575 = 1.0;
double r50576 = r50574 * r50575;
double r50577 = r50572 / r50576;
double r50578 = 1.0925783641640506e+158;
bool r50579 = r50567 <= r50578;
double r50580 = r50571 * r50567;
double r50581 = x_re;
double r50582 = r50581 * r50573;
double r50583 = r50580 - r50582;
double r50584 = r50583 / r50574;
double r50585 = r50584 / r50576;
double r50586 = r50571 / r50576;
double r50587 = r50579 ? r50585 : r50586;
double r50588 = r50569 ? r50577 : r50587;
return r50588;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -5.157783051615335e+135Initial program 42.9
rmApplied add-sqr-sqrt42.9
Applied *-un-lft-identity42.9
Applied times-frac42.9
Simplified42.9
Simplified28.1
rmApplied associate-*l/28.1
Simplified28.1
Taylor expanded around -inf 14.3
if -5.157783051615335e+135 < y.re < 1.0925783641640506e+158Initial program 19.6
rmApplied add-sqr-sqrt19.6
Applied *-un-lft-identity19.6
Applied times-frac19.6
Simplified19.6
Simplified12.6
rmApplied associate-*l/12.4
Simplified12.4
if 1.0925783641640506e+158 < y.re Initial program 44.6
rmApplied add-sqr-sqrt44.6
Applied *-un-lft-identity44.6
Applied times-frac44.6
Simplified44.6
Simplified30.0
rmApplied associate-*l/30.0
Simplified30.0
Taylor expanded around inf 12.5
Final simplification12.7
herbie shell --seed 2020057 +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))))