\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}\;\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 1.221597588228970858235819909623175745754 \cdot 10^{229}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1 \cdot x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r40954 = x_im;
double r40955 = y_re;
double r40956 = r40954 * r40955;
double r40957 = x_re;
double r40958 = y_im;
double r40959 = r40957 * r40958;
double r40960 = r40956 - r40959;
double r40961 = r40955 * r40955;
double r40962 = r40958 * r40958;
double r40963 = r40961 + r40962;
double r40964 = r40960 / r40963;
return r40964;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r40965 = x_im;
double r40966 = y_re;
double r40967 = r40965 * r40966;
double r40968 = x_re;
double r40969 = y_im;
double r40970 = r40968 * r40969;
double r40971 = r40967 - r40970;
double r40972 = r40966 * r40966;
double r40973 = r40969 * r40969;
double r40974 = r40972 + r40973;
double r40975 = r40971 / r40974;
double r40976 = 1.2215975882289709e+229;
bool r40977 = r40975 <= r40976;
double r40978 = sqrt(r40974);
double r40979 = r40971 / r40978;
double r40980 = r40979 / r40978;
double r40981 = -1.0;
double r40982 = r40981 * r40968;
double r40983 = r40982 / r40978;
double r40984 = r40977 ? r40980 : r40983;
return r40984;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
if (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < 1.2215975882289709e+229Initial program 14.8
rmApplied add-sqr-sqrt14.8
Applied associate-/r*14.7
if 1.2215975882289709e+229 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 59.2
rmApplied add-sqr-sqrt59.2
Applied associate-/r*59.2
Taylor expanded around 0 59.5
Final simplification26.4
herbie shell --seed 2019294
(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))))