\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 -1033969720.49365747:\\
\;\;\;\;\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}\;\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 7.8735811135706561 \cdot 10^{304}:\\
\;\;\;\;\sqrt{\frac{1}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}} \cdot \left(\sqrt{\frac{1}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}} \cdot \frac{x.im \cdot y.re - x.re \cdot y.im}{\mathsf{hypot}\left(y.re, y.im\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \frac{-1 \cdot x.re}{\mathsf{hypot}\left(y.re, y.im\right)}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r358 = x_im;
double r359 = y_re;
double r360 = r358 * r359;
double r361 = x_re;
double r362 = y_im;
double r363 = r361 * r362;
double r364 = r360 - r363;
double r365 = r359 * r359;
double r366 = r362 * r362;
double r367 = r365 + r366;
double r368 = r364 / r367;
return r368;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r369 = x_im;
double r370 = y_re;
double r371 = r369 * r370;
double r372 = x_re;
double r373 = y_im;
double r374 = r372 * r373;
double r375 = r371 - r374;
double r376 = r370 * r370;
double r377 = r373 * r373;
double r378 = r376 + r377;
double r379 = r375 / r378;
double r380 = -1033969720.4936575;
bool r381 = r379 <= r380;
double r382 = fma(r370, r370, r377);
double r383 = r382 / r370;
double r384 = r369 / r383;
double r385 = r382 / r373;
double r386 = r372 / r385;
double r387 = r384 - r386;
double r388 = 7.873581113570656e+304;
bool r389 = r379 <= r388;
double r390 = 1.0;
double r391 = hypot(r370, r373);
double r392 = r391 * r390;
double r393 = r390 / r392;
double r394 = sqrt(r393);
double r395 = r375 / r391;
double r396 = r394 * r395;
double r397 = r394 * r396;
double r398 = -1.0;
double r399 = r398 * r372;
double r400 = r399 / r391;
double r401 = r390 * r400;
double r402 = r389 ? r397 : r401;
double r403 = r381 ? r387 : r402;
return r403;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < -1033969720.4936575Initial program 17.1
rmApplied div-sub17.1
Simplified11.1
Simplified5.8
if -1033969720.4936575 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < 7.873581113570656e+304Initial program 13.4
rmApplied add-sqr-sqrt13.4
Applied *-un-lft-identity13.4
Applied times-frac13.4
Simplified13.4
Simplified0.9
rmApplied add-sqr-sqrt1.1
Applied associate-*l*1.1
if 7.873581113570656e+304 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.7
rmApplied add-sqr-sqrt63.7
Applied *-un-lft-identity63.7
Applied times-frac63.7
Simplified63.7
Simplified61.2
rmApplied *-un-lft-identity61.2
Applied associate-*l*61.2
Simplified61.2
Taylor expanded around 0 48.5
Final simplification13.6
herbie shell --seed 2020025 +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))))