\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.891115523492394195744497130325862433787 \cdot 10^{-56}:\\
\;\;\;\;\frac{x.im}{\frac{\mathsf{fma}\left(y.re, y.re, y.im \cdot y.im\right)}{y.re}} - \frac{x.re}{\frac{\mathsf{fma}\left(y.re, y.re, y.im \cdot y.im\right)}{y.im}}\\
\mathbf{elif}\;\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 1.480483434537210747364321312664719288679 \cdot 10^{295}:\\
\;\;\;\;{\left(\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right)}\right)}^{1}\\
\mathbf{else}:\\
\;\;\;\;{\left(\frac{x.im}{\mathsf{hypot}\left(y.re, y.im\right)}\right)}^{1}\\
\end{array}double f(double x_re, double x_im, double y_re, double y_im) {
double r102128 = x_im;
double r102129 = y_re;
double r102130 = r102128 * r102129;
double r102131 = x_re;
double r102132 = y_im;
double r102133 = r102131 * r102132;
double r102134 = r102130 - r102133;
double r102135 = r102129 * r102129;
double r102136 = r102132 * r102132;
double r102137 = r102135 + r102136;
double r102138 = r102134 / r102137;
return r102138;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r102139 = x_im;
double r102140 = y_re;
double r102141 = r102139 * r102140;
double r102142 = x_re;
double r102143 = y_im;
double r102144 = r102142 * r102143;
double r102145 = r102141 - r102144;
double r102146 = r102140 * r102140;
double r102147 = r102143 * r102143;
double r102148 = r102146 + r102147;
double r102149 = r102145 / r102148;
double r102150 = -1.8911155234923942e-56;
bool r102151 = r102149 <= r102150;
double r102152 = fma(r102140, r102140, r102147);
double r102153 = r102152 / r102140;
double r102154 = r102139 / r102153;
double r102155 = r102152 / r102143;
double r102156 = r102142 / r102155;
double r102157 = r102154 - r102156;
double r102158 = 1.4804834345372107e+295;
bool r102159 = r102149 <= r102158;
double r102160 = hypot(r102140, r102143);
double r102161 = r102145 / r102160;
double r102162 = r102161 / r102160;
double r102163 = 1.0;
double r102164 = pow(r102162, r102163);
double r102165 = r102139 / r102160;
double r102166 = pow(r102165, r102163);
double r102167 = r102159 ? r102164 : r102166;
double r102168 = r102151 ? r102157 : r102167;
return r102168;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
if (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < -1.8911155234923942e-56Initial program 14.6
rmApplied div-sub14.6
Simplified10.0
Simplified5.3
if -1.8911155234923942e-56 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) < 1.4804834345372107e+295Initial program 14.0
rmApplied add-sqr-sqrt14.0
Applied *-un-lft-identity14.0
Applied times-frac14.0
Simplified14.0
Simplified0.7
rmApplied pow10.7
Applied pow10.7
Applied pow-prod-down0.7
Simplified0.6
if 1.4804834345372107e+295 < (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))) Initial program 63.5
rmApplied add-sqr-sqrt63.5
Applied *-un-lft-identity63.5
Applied times-frac63.5
Simplified63.5
Simplified60.7
rmApplied pow160.7
Applied pow160.7
Applied pow-prod-down60.7
Simplified60.7
Taylor expanded around inf 48.9
Final simplification13.7
herbie shell --seed 2019344 +o rules:numerics
(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))))