\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 -2.98296378496585413 \cdot 10^{153}:\\
\;\;\;\;\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.im \le -1.74442522881606413 \cdot 10^{-149}:\\
\;\;\;\;\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 3.5501401682999149 \cdot 10^{-146}:\\
\;\;\;\;\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.im \le 1.72530895686821607 \cdot 10^{162}:\\
\;\;\;\;\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) \cdot 1}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r50649 = x_im;
double r50650 = y_re;
double r50651 = r50649 * r50650;
double r50652 = x_re;
double r50653 = y_im;
double r50654 = r50652 * r50653;
double r50655 = r50651 - r50654;
double r50656 = r50650 * r50650;
double r50657 = r50653 * r50653;
double r50658 = r50656 + r50657;
double r50659 = r50655 / r50658;
return r50659;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r50660 = y_im;
double r50661 = -2.982963784965854e+153;
bool r50662 = r50660 <= r50661;
double r50663 = x_im;
double r50664 = y_re;
double r50665 = r50663 * r50664;
double r50666 = x_re;
double r50667 = r50666 * r50660;
double r50668 = r50665 - r50667;
double r50669 = hypot(r50664, r50660);
double r50670 = r50668 / r50669;
double r50671 = 1.0;
double r50672 = r50669 * r50671;
double r50673 = r50670 / r50672;
double r50674 = -1.7444252288160641e-149;
bool r50675 = r50660 <= r50674;
double r50676 = r50660 * r50660;
double r50677 = fma(r50664, r50664, r50676);
double r50678 = r50677 / r50664;
double r50679 = r50663 / r50678;
double r50680 = r50677 / r50660;
double r50681 = r50666 / r50680;
double r50682 = r50679 - r50681;
double r50683 = 3.550140168299915e-146;
bool r50684 = r50660 <= r50683;
double r50685 = 1.725308956868216e+162;
bool r50686 = r50660 <= r50685;
double r50687 = -1.0;
double r50688 = r50687 * r50666;
double r50689 = r50688 / r50672;
double r50690 = r50686 ? r50682 : r50689;
double r50691 = r50684 ? r50673 : r50690;
double r50692 = r50675 ? r50682 : r50691;
double r50693 = r50662 ? r50673 : r50692;
return r50693;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.im < -2.982963784965854e+153 or -1.7444252288160641e-149 < y.im < 3.550140168299915e-146Initial program 30.5
rmApplied add-sqr-sqrt30.5
Applied *-un-lft-identity30.5
Applied times-frac30.5
Simplified30.5
Simplified18.3
rmApplied associate-*l/18.2
Simplified18.2
if -2.982963784965854e+153 < y.im < -1.7444252288160641e-149 or 3.550140168299915e-146 < y.im < 1.725308956868216e+162Initial program 17.4
rmApplied div-sub17.4
Simplified15.9
Simplified12.6
if 1.725308956868216e+162 < y.im Initial program 45.3
rmApplied add-sqr-sqrt45.3
Applied *-un-lft-identity45.3
Applied times-frac45.3
Simplified45.3
Simplified30.9
rmApplied associate-*l/30.8
Simplified30.8
Taylor expanded around 0 13.2
Final simplification14.8
herbie shell --seed 2020059 +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))))