\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{1}{\sqrt{\mathsf{fma}\left(y.im, y.im, y.re \cdot y.re\right)}} \cdot \frac{\mathsf{fma}\left(x.re, y.re, x.im \cdot y.im\right)}{\sqrt{\mathsf{fma}\left(y.im, y.im, y.re \cdot y.re\right)}}double f(double x_re, double x_im, double y_re, double y_im) {
double r3925477 = x_re;
double r3925478 = y_re;
double r3925479 = r3925477 * r3925478;
double r3925480 = x_im;
double r3925481 = y_im;
double r3925482 = r3925480 * r3925481;
double r3925483 = r3925479 + r3925482;
double r3925484 = r3925478 * r3925478;
double r3925485 = r3925481 * r3925481;
double r3925486 = r3925484 + r3925485;
double r3925487 = r3925483 / r3925486;
return r3925487;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r3925488 = 1.0;
double r3925489 = y_im;
double r3925490 = y_re;
double r3925491 = r3925490 * r3925490;
double r3925492 = fma(r3925489, r3925489, r3925491);
double r3925493 = sqrt(r3925492);
double r3925494 = r3925488 / r3925493;
double r3925495 = x_re;
double r3925496 = x_im;
double r3925497 = r3925496 * r3925489;
double r3925498 = fma(r3925495, r3925490, r3925497);
double r3925499 = r3925498 / r3925493;
double r3925500 = r3925494 * r3925499;
return r3925500;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 26.3
Simplified26.3
rmApplied add-sqr-sqrt26.3
Applied associate-/r*26.2
rmApplied div-inv26.3
Final simplification26.3
herbie shell --seed 2019165 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, real part"
(/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))