\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} = -\infty \lor \neg \left(\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 5.085210929411777452302962127466150247434 \cdot 10^{305}\right):\\
\;\;\;\;\frac{-x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(x.im \cdot y.re - x.re \cdot y.im\right) \cdot \frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\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 r62941 = x_im;
double r62942 = y_re;
double r62943 = r62941 * r62942;
double r62944 = x_re;
double r62945 = y_im;
double r62946 = r62944 * r62945;
double r62947 = r62943 - r62946;
double r62948 = r62942 * r62942;
double r62949 = r62945 * r62945;
double r62950 = r62948 + r62949;
double r62951 = r62947 / r62950;
return r62951;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r62952 = x_im;
double r62953 = y_re;
double r62954 = r62952 * r62953;
double r62955 = x_re;
double r62956 = y_im;
double r62957 = r62955 * r62956;
double r62958 = r62954 - r62957;
double r62959 = r62953 * r62953;
double r62960 = r62956 * r62956;
double r62961 = r62959 + r62960;
double r62962 = r62958 / r62961;
double r62963 = -inf.0;
bool r62964 = r62962 <= r62963;
double r62965 = 5.0852109294117775e+305;
bool r62966 = r62962 <= r62965;
double r62967 = !r62966;
bool r62968 = r62964 || r62967;
double r62969 = -r62955;
double r62970 = sqrt(r62961);
double r62971 = r62969 / r62970;
double r62972 = 1.0;
double r62973 = r62972 / r62970;
double r62974 = r62958 * r62973;
double r62975 = r62974 / r62970;
double r62976 = r62968 ? r62971 : r62975;
return r62976;
}



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))) < -inf.0 or 5.0852109294117775e+305 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.9
rmApplied add-sqr-sqrt63.9
Applied associate-/r*63.9
Taylor expanded around 0 59.5
Simplified59.5
if -inf.0 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < 5.0852109294117775e+305Initial program 11.8
rmApplied add-sqr-sqrt11.8
Applied associate-/r*11.7
rmApplied div-inv11.8
Final simplification25.0
herbie shell --seed 2019351
(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))))