\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 -1.46682442987371600670350493989033073923 \cdot 10^{138}:\\
\;\;\;\;\frac{-1 \cdot x.im}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{elif}\;y.re \le 3.180043411345887964768740004292382458344 \cdot 10^{156}:\\
\;\;\;\;\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 r103541 = x_im;
double r103542 = y_re;
double r103543 = r103541 * r103542;
double r103544 = x_re;
double r103545 = y_im;
double r103546 = r103544 * r103545;
double r103547 = r103543 - r103546;
double r103548 = r103542 * r103542;
double r103549 = r103545 * r103545;
double r103550 = r103548 + r103549;
double r103551 = r103547 / r103550;
return r103551;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r103552 = y_re;
double r103553 = -1.466824429873716e+138;
bool r103554 = r103552 <= r103553;
double r103555 = -1.0;
double r103556 = x_im;
double r103557 = r103555 * r103556;
double r103558 = y_im;
double r103559 = hypot(r103552, r103558);
double r103560 = 1.0;
double r103561 = r103559 * r103560;
double r103562 = r103557 / r103561;
double r103563 = 3.180043411345888e+156;
bool r103564 = r103552 <= r103563;
double r103565 = r103556 * r103552;
double r103566 = x_re;
double r103567 = r103566 * r103558;
double r103568 = r103565 - r103567;
double r103569 = r103568 / r103559;
double r103570 = r103569 / r103561;
double r103571 = r103556 / r103561;
double r103572 = r103564 ? r103570 : r103571;
double r103573 = r103554 ? r103562 : r103572;
return r103573;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -1.466824429873716e+138Initial program 42.3
rmApplied add-sqr-sqrt42.3
Applied *-un-lft-identity42.3
Applied times-frac42.3
Simplified42.3
Simplified29.0
rmApplied associate-*l/29.0
Simplified29.0
Taylor expanded around -inf 14.7
if -1.466824429873716e+138 < y.re < 3.180043411345888e+156Initial program 19.5
rmApplied add-sqr-sqrt19.5
Applied *-un-lft-identity19.5
Applied times-frac19.6
Simplified19.6
Simplified12.6
rmApplied associate-*l/12.5
Simplified12.5
if 3.180043411345888e+156 < y.re Initial program 46.2
rmApplied add-sqr-sqrt46.2
Applied *-un-lft-identity46.2
Applied times-frac46.2
Simplified46.2
Simplified30.3
rmApplied associate-*l/30.2
Simplified30.2
Taylor expanded around inf 13.3
Final simplification12.9
herbie shell --seed 2019346 +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))))