double f(double x_re, double x_im, double y_re, double y_im) {
double r625310 = x_re;
double r625311 = y_re;
double r625312 = r625310 * r625311;
double r625313 = x_im;
double r625314 = y_im;
double r625315 = r625313 * r625314;
double r625316 = r625312 + r625315;
double r625317 = r625311 * r625311;
double r625318 = r625314 * r625314;
double r625319 = r625317 + r625318;
double r625320 = r625316 / r625319;
return r625320;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r625321 = x_re;
double r625322 = y_re;
double r625323 = r625321 * r625322;
double r625324 = x_im;
double r625325 = y_im;
double r625326 = r625324 * r625325;
double r625327 = r625323 + r625326;
double r625328 = r625322 * r625322;
double r625329 = r625325 * r625325;
double r625330 = r625328 + r625329;
double r625331 = r625327 / r625330;
return r625331;
}
\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}


Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Initial program 1.1
Final simplification1.1
herbie shell --seed 2019102 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, real part"
(/.p16 (+.p16 (*.p16 x.re y.re) (*.p16 x.im y.im)) (+.p16 (*.p16 y.re y.re) (*.p16 y.im y.im))))