\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{x.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} - \frac{y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.re}{\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 r71416 = x_im;
double r71417 = y_re;
double r71418 = r71416 * r71417;
double r71419 = x_re;
double r71420 = y_im;
double r71421 = r71419 * r71420;
double r71422 = r71418 - r71421;
double r71423 = r71417 * r71417;
double r71424 = r71420 * r71420;
double r71425 = r71423 + r71424;
double r71426 = r71422 / r71425;
return r71426;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r71427 = x_im;
double r71428 = y_re;
double r71429 = r71428 * r71428;
double r71430 = y_im;
double r71431 = r71430 * r71430;
double r71432 = r71429 + r71431;
double r71433 = sqrt(r71432);
double r71434 = r71427 / r71433;
double r71435 = r71428 / r71433;
double r71436 = r71434 * r71435;
double r71437 = r71430 / r71433;
double r71438 = x_re;
double r71439 = r71438 / r71433;
double r71440 = r71437 * r71439;
double r71441 = r71436 - r71440;
return r71441;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.4
rmApplied div-sub26.4
Simplified25.0
rmApplied add-sqr-sqrt25.0
Applied times-frac23.8
Simplified23.8
Simplified23.8
rmApplied *-un-lft-identity23.8
Applied *-un-lft-identity23.8
Applied times-frac23.8
Applied associate-*l*23.8
Simplified25.3
rmApplied add-sqr-sqrt25.3
Applied times-frac23.9
Final simplification23.9
herbie shell --seed 2019174
(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))))