\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 3.315223608026935 \cdot 10^{+87}:\\
\;\;\;\;\frac{x.im \cdot y.re - x.re \cdot y.im}{\mathsf{hypot}\left(y.im, y.re\right)} \cdot \frac{1}{\mathsf{hypot}\left(y.im, y.re\right)}\\
\mathbf{elif}\;y.im \le 1.263326239685677 \cdot 10^{+154}:\\
\;\;\;\;\frac{-x.re}{\sqrt{\mathsf{fma}\left(y.im, y.im, \left(y.re \cdot y.re\right)\right)}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x.im \cdot y.re - x.re \cdot y.im}{\mathsf{hypot}\left(y.im, y.re\right)} \cdot \frac{1}{\mathsf{hypot}\left(y.im, y.re\right)}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r2374151 = x_im;
double r2374152 = y_re;
double r2374153 = r2374151 * r2374152;
double r2374154 = x_re;
double r2374155 = y_im;
double r2374156 = r2374154 * r2374155;
double r2374157 = r2374153 - r2374156;
double r2374158 = r2374152 * r2374152;
double r2374159 = r2374155 * r2374155;
double r2374160 = r2374158 + r2374159;
double r2374161 = r2374157 / r2374160;
return r2374161;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r2374162 = y_im;
double r2374163 = 3.315223608026935e+87;
bool r2374164 = r2374162 <= r2374163;
double r2374165 = x_im;
double r2374166 = y_re;
double r2374167 = r2374165 * r2374166;
double r2374168 = x_re;
double r2374169 = r2374168 * r2374162;
double r2374170 = r2374167 - r2374169;
double r2374171 = hypot(r2374162, r2374166);
double r2374172 = r2374170 / r2374171;
double r2374173 = 1.0;
double r2374174 = r2374173 / r2374171;
double r2374175 = r2374172 * r2374174;
double r2374176 = 1.263326239685677e+154;
bool r2374177 = r2374162 <= r2374176;
double r2374178 = -r2374168;
double r2374179 = r2374166 * r2374166;
double r2374180 = fma(r2374162, r2374162, r2374179);
double r2374181 = sqrt(r2374180);
double r2374182 = r2374178 / r2374181;
double r2374183 = r2374177 ? r2374182 : r2374175;
double r2374184 = r2374164 ? r2374175 : r2374183;
return r2374184;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if y.im < 3.315223608026935e+87 or 1.263326239685677e+154 < y.im Initial program 25.6
Simplified25.6
rmApplied *-un-lft-identity25.6
Applied associate-/l*25.7
rmApplied *-un-lft-identity25.7
Applied add-sqr-sqrt25.7
Applied times-frac25.7
Applied add-cube-cbrt25.7
Applied times-frac25.6
Simplified25.6
Simplified16.2
if 3.315223608026935e+87 < y.im < 1.263326239685677e+154Initial program 22.5
Simplified22.5
rmApplied add-sqr-sqrt22.5
Applied associate-/r*22.4
Taylor expanded around 0 21.4
Simplified21.4
Final simplification16.5
herbie shell --seed 2019132 +o rules:numerics
(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))))