\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}\;x.im \le 4.898100458132601400927039599397440378071 \cdot 10^{76}:\\
\;\;\;\;\frac{x.im}{y.re + \frac{y.im \cdot y.im}{y.re}} - \frac{x.re}{y.re \cdot \frac{y.re}{y.im} + y.im}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im}{y.re + \frac{y.im}{\frac{y.re}{y.im}}} - \frac{x.re}{y.im + \frac{y.re \cdot y.re}{y.im}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r61779 = x_im;
double r61780 = y_re;
double r61781 = r61779 * r61780;
double r61782 = x_re;
double r61783 = y_im;
double r61784 = r61782 * r61783;
double r61785 = r61781 - r61784;
double r61786 = r61780 * r61780;
double r61787 = r61783 * r61783;
double r61788 = r61786 + r61787;
double r61789 = r61785 / r61788;
return r61789;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r61790 = x_im;
double r61791 = 4.8981004581326014e+76;
bool r61792 = r61790 <= r61791;
double r61793 = y_re;
double r61794 = y_im;
double r61795 = r61794 * r61794;
double r61796 = r61795 / r61793;
double r61797 = r61793 + r61796;
double r61798 = r61790 / r61797;
double r61799 = x_re;
double r61800 = r61793 / r61794;
double r61801 = r61793 * r61800;
double r61802 = r61801 + r61794;
double r61803 = r61799 / r61802;
double r61804 = r61798 - r61803;
double r61805 = r61794 / r61800;
double r61806 = r61793 + r61805;
double r61807 = r61790 / r61806;
double r61808 = r61793 * r61793;
double r61809 = r61808 / r61794;
double r61810 = r61794 + r61809;
double r61811 = r61799 / r61810;
double r61812 = r61807 - r61811;
double r61813 = r61792 ? r61804 : r61812;
return r61813;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if x.im < 4.8981004581326014e+76Initial program 24.1
rmApplied div-sub24.1
Simplified23.0
Simplified21.6
Taylor expanded around 0 15.6
Simplified15.6
Taylor expanded around 0 7.5
Simplified7.5
rmApplied *-un-lft-identity7.5
Applied *-un-lft-identity7.5
Applied times-frac7.5
Simplified7.5
Simplified4.8
if 4.8981004581326014e+76 < x.im Initial program 35.3
rmApplied div-sub35.3
Simplified30.7
Simplified29.0
Taylor expanded around 0 16.4
Simplified16.4
Taylor expanded around 0 9.6
Simplified9.6
rmApplied *-un-lft-identity9.6
Applied *-un-lft-identity9.6
Applied times-frac9.6
Simplified9.6
Simplified5.7
Final simplification4.9
herbie shell --seed 2019179
(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))))