\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 -2.020491544654025199922900102043661000373 \cdot 10^{153}:\\
\;\;\;\;\frac{y.re}{\frac{y.im \cdot y.im + y.re \cdot y.re}{x.im}} - \frac{x.re}{\frac{y.re}{\frac{y.im}{y.re}} + y.im}\\
\mathbf{elif}\;y.im \le 1.030193990259699638432445694492071758293 \cdot 10^{-162}:\\
\;\;\;\;\frac{y.re}{\frac{y.im \cdot y.im}{x.im} + \frac{y.re}{\frac{x.im}{y.re}}} - \frac{x.re}{\frac{y.im \cdot y.im + y.re \cdot y.re}{y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{y.re}{y.im \cdot y.im + y.re \cdot y.re}}{\frac{1}{x.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 r3241023 = x_im;
double r3241024 = y_re;
double r3241025 = r3241023 * r3241024;
double r3241026 = x_re;
double r3241027 = y_im;
double r3241028 = r3241026 * r3241027;
double r3241029 = r3241025 - r3241028;
double r3241030 = r3241024 * r3241024;
double r3241031 = r3241027 * r3241027;
double r3241032 = r3241030 + r3241031;
double r3241033 = r3241029 / r3241032;
return r3241033;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r3241034 = y_im;
double r3241035 = -2.0204915446540252e+153;
bool r3241036 = r3241034 <= r3241035;
double r3241037 = y_re;
double r3241038 = r3241034 * r3241034;
double r3241039 = r3241037 * r3241037;
double r3241040 = r3241038 + r3241039;
double r3241041 = x_im;
double r3241042 = r3241040 / r3241041;
double r3241043 = r3241037 / r3241042;
double r3241044 = x_re;
double r3241045 = r3241034 / r3241037;
double r3241046 = r3241037 / r3241045;
double r3241047 = r3241046 + r3241034;
double r3241048 = r3241044 / r3241047;
double r3241049 = r3241043 - r3241048;
double r3241050 = 1.0301939902596996e-162;
bool r3241051 = r3241034 <= r3241050;
double r3241052 = r3241038 / r3241041;
double r3241053 = r3241041 / r3241037;
double r3241054 = r3241037 / r3241053;
double r3241055 = r3241052 + r3241054;
double r3241056 = r3241037 / r3241055;
double r3241057 = r3241040 / r3241034;
double r3241058 = r3241044 / r3241057;
double r3241059 = r3241056 - r3241058;
double r3241060 = r3241037 / r3241040;
double r3241061 = 1.0;
double r3241062 = r3241061 / r3241041;
double r3241063 = r3241060 / r3241062;
double r3241064 = r3241039 / r3241034;
double r3241065 = r3241034 + r3241064;
double r3241066 = r3241044 / r3241065;
double r3241067 = r3241063 - r3241066;
double r3241068 = r3241051 ? r3241059 : r3241067;
double r3241069 = r3241036 ? r3241049 : r3241068;
return r3241069;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if y.im < -2.0204915446540252e+153Initial program 44.8
rmApplied add-sqr-sqrt44.8
Applied associate-/r*44.8
rmApplied div-sub44.8
Applied div-sub44.8
Simplified44.6
Simplified43.7
Taylor expanded around 0 16.5
Simplified16.5
rmApplied associate-/l*12.1
if -2.0204915446540252e+153 < y.im < 1.0301939902596996e-162Initial program 19.6
rmApplied add-sqr-sqrt19.6
Applied associate-/r*19.5
rmApplied div-sub19.5
Applied div-sub19.5
Simplified20.6
Simplified19.9
Taylor expanded around 0 19.9
Simplified15.9
if 1.0301939902596996e-162 < y.im Initial program 27.6
rmApplied add-sqr-sqrt27.6
Applied associate-/r*27.6
rmApplied div-sub27.6
Applied div-sub27.6
Simplified28.1
Simplified25.5
Taylor expanded around 0 16.1
Simplified16.1
rmApplied div-inv16.1
Applied associate-/r*14.4
Final simplification14.8
herbie shell --seed 2019169
(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))))