\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}\;\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 1.960885555577793652414476012337475353598 \cdot 10^{292}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r51133 = x_im;
double r51134 = y_re;
double r51135 = r51133 * r51134;
double r51136 = x_re;
double r51137 = y_im;
double r51138 = r51136 * r51137;
double r51139 = r51135 - r51138;
double r51140 = r51134 * r51134;
double r51141 = r51137 * r51137;
double r51142 = r51140 + r51141;
double r51143 = r51139 / r51142;
return r51143;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r51144 = x_im;
double r51145 = y_re;
double r51146 = r51144 * r51145;
double r51147 = x_re;
double r51148 = y_im;
double r51149 = r51147 * r51148;
double r51150 = r51146 - r51149;
double r51151 = r51145 * r51145;
double r51152 = r51148 * r51148;
double r51153 = r51151 + r51152;
double r51154 = r51150 / r51153;
double r51155 = 1.9608855555777937e+292;
bool r51156 = r51154 <= r51155;
double r51157 = sqrt(r51153);
double r51158 = r51150 / r51157;
double r51159 = r51158 / r51157;
double r51160 = r51144 / r51157;
double r51161 = r51156 ? r51159 : r51160;
return r51161;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < 1.9608855555777937e+292Initial program 14.3
rmApplied add-sqr-sqrt14.3
Applied associate-/r*14.2
if 1.9608855555777937e+292 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 62.7
rmApplied add-sqr-sqrt62.7
Applied associate-/r*62.7
Taylor expanded around inf 60.1
Final simplification25.2
herbie shell --seed 2019298
(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))))