\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 -1.351214721549483218261281106569258966909 \cdot 10^{154} \lor \neg \left(y.im \le 8.000358861136643239312158095843514305232 \cdot 10^{153}\right):\\
\;\;\;\;\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \frac{x.re}{\frac{{y.re}^{2}}{y.im} + y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r100478 = x_im;
double r100479 = y_re;
double r100480 = r100478 * r100479;
double r100481 = x_re;
double r100482 = y_im;
double r100483 = r100481 * r100482;
double r100484 = r100480 - r100483;
double r100485 = r100479 * r100479;
double r100486 = r100482 * r100482;
double r100487 = r100485 + r100486;
double r100488 = r100484 / r100487;
return r100488;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r100489 = y_im;
double r100490 = -1.3512147215494832e+154;
bool r100491 = r100489 <= r100490;
double r100492 = 8.000358861136643e+153;
bool r100493 = r100489 <= r100492;
double r100494 = !r100493;
bool r100495 = r100491 || r100494;
double r100496 = x_im;
double r100497 = y_re;
double r100498 = r100497 * r100497;
double r100499 = r100489 * r100489;
double r100500 = r100498 + r100499;
double r100501 = r100500 / r100497;
double r100502 = r100496 / r100501;
double r100503 = x_re;
double r100504 = 2.0;
double r100505 = pow(r100497, r100504);
double r100506 = r100505 / r100489;
double r100507 = r100506 + r100489;
double r100508 = r100503 / r100507;
double r100509 = r100502 - r100508;
double r100510 = pow(r100489, r100504);
double r100511 = r100510 / r100497;
double r100512 = r100497 + r100511;
double r100513 = r100496 / r100512;
double r100514 = r100500 / r100489;
double r100515 = r100503 / r100514;
double r100516 = r100513 - r100515;
double r100517 = r100495 ? r100509 : r100516;
return r100517;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < -1.3512147215494832e+154 or 8.000358861136643e+153 < y.im Initial program 46.6
rmApplied add-sqr-sqrt46.6
rmApplied div-sub46.6
Simplified46.4
Simplified45.3
Taylor expanded around 0 16.8
if -1.3512147215494832e+154 < y.im < 8.000358861136643e+153Initial program 18.8
rmApplied add-sqr-sqrt18.8
rmApplied div-sub18.8
Simplified17.0
Simplified15.2
Taylor expanded around 0 5.4
Final simplification8.6
herbie shell --seed 2019353
(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))))