\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 -4.002330886974353 \cdot 10^{-17} \lor \neg \left(y.re \le 3.4366687886863465 \cdot 10^{63}\right):\\
\;\;\;\;\frac{x.im}{\frac{{y.re}^{2} + {y.im}^{2}}{y.re}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{y.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 r64418 = x_im;
double r64419 = y_re;
double r64420 = r64418 * r64419;
double r64421 = x_re;
double r64422 = y_im;
double r64423 = r64421 * r64422;
double r64424 = r64420 - r64423;
double r64425 = r64419 * r64419;
double r64426 = r64422 * r64422;
double r64427 = r64425 + r64426;
double r64428 = r64424 / r64427;
return r64428;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r64429 = y_re;
double r64430 = -4.002330886974353e-17;
bool r64431 = r64429 <= r64430;
double r64432 = 3.4366687886863465e+63;
bool r64433 = r64429 <= r64432;
double r64434 = !r64433;
bool r64435 = r64431 || r64434;
double r64436 = x_im;
double r64437 = 2.0;
double r64438 = pow(r64429, r64437);
double r64439 = y_im;
double r64440 = pow(r64439, r64437);
double r64441 = r64438 + r64440;
double r64442 = r64441 / r64429;
double r64443 = r64436 / r64442;
double r64444 = x_re;
double r64445 = r64444 * r64439;
double r64446 = r64429 * r64429;
double r64447 = r64439 * r64439;
double r64448 = r64446 + r64447;
double r64449 = r64445 / r64448;
double r64450 = r64443 - r64449;
double r64451 = r64436 * r64429;
double r64452 = r64451 / r64448;
double r64453 = sqrt(r64448);
double r64454 = r64444 / r64453;
double r64455 = r64439 / r64453;
double r64456 = r64454 * r64455;
double r64457 = r64452 - r64456;
double r64458 = r64435 ? r64450 : r64457;
return r64458;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.re < -4.002330886974353e-17 or 3.4366687886863465e+63 < y.re Initial program 33.9
rmApplied div-sub33.9
rmApplied associate-/l*30.5
Simplified30.5
if -4.002330886974353e-17 < y.re < 3.4366687886863465e+63Initial program 19.0
rmApplied div-sub19.0
rmApplied add-sqr-sqrt19.0
Applied times-frac17.2
Final simplification23.7
herbie shell --seed 2020057
(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))))