\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 -1.3657760091869803 \cdot 10^{154}:\\
\;\;\;\;\frac{-1 \cdot x.im}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{elif}\;y.re \le -4.1054268527148993 \cdot 10^{-98}:\\
\;\;\;\;\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}\;y.re \le 9.80541031375375915 \cdot 10^{132}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{\mathsf{hypot}\left(y.re, y.im\right) \cdot 1}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r108456 = x_im;
double r108457 = y_re;
double r108458 = r108456 * r108457;
double r108459 = x_re;
double r108460 = y_im;
double r108461 = r108459 * r108460;
double r108462 = r108458 - r108461;
double r108463 = r108457 * r108457;
double r108464 = r108460 * r108460;
double r108465 = r108463 + r108464;
double r108466 = r108462 / r108465;
return r108466;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r108467 = y_re;
double r108468 = -1.3657760091869803e+154;
bool r108469 = r108467 <= r108468;
double r108470 = -1.0;
double r108471 = x_im;
double r108472 = r108470 * r108471;
double r108473 = y_im;
double r108474 = hypot(r108467, r108473);
double r108475 = 1.0;
double r108476 = r108474 * r108475;
double r108477 = r108472 / r108476;
double r108478 = -4.1054268527148993e-98;
bool r108479 = r108467 <= r108478;
double r108480 = r108473 * r108473;
double r108481 = fma(r108467, r108467, r108480);
double r108482 = r108481 / r108467;
double r108483 = r108471 / r108482;
double r108484 = x_re;
double r108485 = r108481 / r108473;
double r108486 = r108484 / r108485;
double r108487 = r108483 - r108486;
double r108488 = 9.805410313753759e+132;
bool r108489 = r108467 <= r108488;
double r108490 = r108471 * r108467;
double r108491 = r108484 * r108473;
double r108492 = r108490 - r108491;
double r108493 = r108492 / r108474;
double r108494 = r108493 / r108476;
double r108495 = r108471 / r108476;
double r108496 = r108489 ? r108494 : r108495;
double r108497 = r108479 ? r108487 : r108496;
double r108498 = r108469 ? r108477 : r108497;
return r108498;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.re < -1.3657760091869803e+154Initial program 46.3
rmApplied add-sqr-sqrt46.3
Applied *-un-lft-identity46.3
Applied times-frac46.3
Simplified46.3
Simplified30.5
rmApplied associate-*l/30.4
Simplified30.4
Taylor expanded around -inf 13.8
if -1.3657760091869803e+154 < y.re < -4.1054268527148993e-98Initial program 19.1
rmApplied div-sub19.1
Simplified15.7
Simplified14.0
if -4.1054268527148993e-98 < y.re < 9.805410313753759e+132Initial program 20.7
rmApplied add-sqr-sqrt20.7
Applied *-un-lft-identity20.7
Applied times-frac20.7
Simplified20.7
Simplified12.5
rmApplied associate-*l/12.4
Simplified12.4
if 9.805410313753759e+132 < y.re Initial program 40.6
rmApplied add-sqr-sqrt40.6
Applied *-un-lft-identity40.6
Applied times-frac40.6
Simplified40.6
Simplified26.0
rmApplied associate-*l/25.9
Simplified25.9
Taylor expanded around inf 14.5
Final simplification13.2
herbie shell --seed 2020046 +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))))