\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.04391992940771602 \cdot 10^{279}:\\
\;\;\;\;\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 r75243 = x_im;
double r75244 = y_re;
double r75245 = r75243 * r75244;
double r75246 = x_re;
double r75247 = y_im;
double r75248 = r75246 * r75247;
double r75249 = r75245 - r75248;
double r75250 = r75244 * r75244;
double r75251 = r75247 * r75247;
double r75252 = r75250 + r75251;
double r75253 = r75249 / r75252;
return r75253;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r75254 = x_im;
double r75255 = y_re;
double r75256 = r75254 * r75255;
double r75257 = x_re;
double r75258 = y_im;
double r75259 = r75257 * r75258;
double r75260 = r75256 - r75259;
double r75261 = r75255 * r75255;
double r75262 = r75258 * r75258;
double r75263 = r75261 + r75262;
double r75264 = r75260 / r75263;
double r75265 = 1.043919929407716e+279;
bool r75266 = r75264 <= r75265;
double r75267 = sqrt(r75263);
double r75268 = r75260 / r75267;
double r75269 = r75268 / r75267;
double r75270 = r75254 / r75267;
double r75271 = r75266 ? r75269 : r75270;
return r75271;
}



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.043919929407716e+279Initial program 14.2
rmApplied add-sqr-sqrt14.2
Applied associate-/r*14.1
if 1.043919929407716e+279 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 61.9
rmApplied add-sqr-sqrt61.9
Applied associate-/r*61.9
Taylor expanded around inf 60.3
Final simplification25.6
herbie shell --seed 2020065
(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))))