\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 -3.660481816459021646058030108492220670906 \cdot 10^{-156} \lor \neg \left(y.im \le 3.297289885168792012073579345208696767758 \cdot 10^{91}\right):\\
\;\;\;\;\frac{y.re}{y.im \cdot y.im + y.re \cdot y.re} \cdot x.im - \frac{y.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot \frac{x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\
\mathbf{else}:\\
\;\;\;\;\left(x.im \cdot \frac{y.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\right) \cdot \frac{1}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} - \frac{y.im \cdot x.re}{y.im \cdot y.im + y.re \cdot y.re}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r53462 = x_im;
double r53463 = y_re;
double r53464 = r53462 * r53463;
double r53465 = x_re;
double r53466 = y_im;
double r53467 = r53465 * r53466;
double r53468 = r53464 - r53467;
double r53469 = r53463 * r53463;
double r53470 = r53466 * r53466;
double r53471 = r53469 + r53470;
double r53472 = r53468 / r53471;
return r53472;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r53473 = y_im;
double r53474 = -3.6604818164590216e-156;
bool r53475 = r53473 <= r53474;
double r53476 = 3.297289885168792e+91;
bool r53477 = r53473 <= r53476;
double r53478 = !r53477;
bool r53479 = r53475 || r53478;
double r53480 = y_re;
double r53481 = r53473 * r53473;
double r53482 = r53480 * r53480;
double r53483 = r53481 + r53482;
double r53484 = r53480 / r53483;
double r53485 = x_im;
double r53486 = r53484 * r53485;
double r53487 = sqrt(r53483);
double r53488 = r53473 / r53487;
double r53489 = x_re;
double r53490 = r53489 / r53487;
double r53491 = r53488 * r53490;
double r53492 = r53486 - r53491;
double r53493 = r53480 / r53487;
double r53494 = r53485 * r53493;
double r53495 = 1.0;
double r53496 = r53495 / r53487;
double r53497 = r53494 * r53496;
double r53498 = r53473 * r53489;
double r53499 = r53498 / r53483;
double r53500 = r53497 - r53499;
double r53501 = r53479 ? r53492 : r53500;
return r53501;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < -3.6604818164590216e-156 or 3.297289885168792e+91 < y.im Initial program 29.7
rmApplied div-sub29.7
Simplified29.0
rmApplied add-sqr-sqrt29.0
Applied times-frac26.1
Simplified26.1
Simplified26.1
if -3.6604818164590216e-156 < y.im < 3.297289885168792e+91Initial program 20.3
rmApplied div-sub20.3
Simplified17.6
rmApplied add-sqr-sqrt17.6
Applied *-un-lft-identity17.6
Applied times-frac17.6
Applied associate-*l*17.6
Simplified17.6
Final simplification22.4
herbie shell --seed 2019194
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, imaginary part"
(/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))