\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{\frac{x.im \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} - \frac{x.re}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}double f(double x_re, double x_im, double y_re, double y_im) {
double r77340 = x_im;
double r77341 = y_re;
double r77342 = r77340 * r77341;
double r77343 = x_re;
double r77344 = y_im;
double r77345 = r77343 * r77344;
double r77346 = r77342 - r77345;
double r77347 = r77341 * r77341;
double r77348 = r77344 * r77344;
double r77349 = r77347 + r77348;
double r77350 = r77346 / r77349;
return r77350;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r77351 = x_im;
double r77352 = y_re;
double r77353 = r77351 * r77352;
double r77354 = r77352 * r77352;
double r77355 = y_im;
double r77356 = r77355 * r77355;
double r77357 = r77354 + r77356;
double r77358 = sqrt(r77357);
double r77359 = r77353 / r77358;
double r77360 = x_re;
double r77361 = r77358 / r77355;
double r77362 = r77360 / r77361;
double r77363 = r77359 - r77362;
double r77364 = r77363 / r77358;
return r77364;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.1
rmApplied add-sqr-sqrt26.1
Applied associate-/r*26.1
rmApplied div-sub26.1
rmApplied associate-/l*24.5
Final simplification24.5
herbie shell --seed 2020062
(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))))