\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{y.re \cdot \frac{x.im}{\mathsf{hypot}\left(y.re, y.im\right)} - y.im \cdot \frac{x.re}{\mathsf{hypot}\left(y.re, y.im\right)}}{\mathsf{hypot}\left(y.re, y.im\right)}double f(double x_re, double x_im, double y_re, double y_im) {
double r62301 = x_im;
double r62302 = y_re;
double r62303 = r62301 * r62302;
double r62304 = x_re;
double r62305 = y_im;
double r62306 = r62304 * r62305;
double r62307 = r62303 - r62306;
double r62308 = r62302 * r62302;
double r62309 = r62305 * r62305;
double r62310 = r62308 + r62309;
double r62311 = r62307 / r62310;
return r62311;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r62312 = y_re;
double r62313 = x_im;
double r62314 = y_im;
double r62315 = hypot(r62312, r62314);
double r62316 = r62313 / r62315;
double r62317 = r62312 * r62316;
double r62318 = x_re;
double r62319 = r62318 / r62315;
double r62320 = r62314 * r62319;
double r62321 = r62317 - r62320;
double r62322 = r62321 / r62315;
return r62322;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 25.8
Simplified25.8
rmApplied add-sqr-sqrt25.8
Applied *-un-lft-identity25.8
Applied times-frac25.8
Simplified25.8
Simplified17.2
rmApplied *-un-lft-identity17.2
Applied associate-*l*17.2
Simplified17.1
rmApplied div-sub17.1
Simplified17.1
Simplified9.9
rmApplied *-un-lft-identity9.9
Applied times-frac1.2
Simplified1.2
Final simplification1.2
herbie shell --seed 2019303 +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))))