\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{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 r54186 = x_im;
double r54187 = y_re;
double r54188 = r54186 * r54187;
double r54189 = x_re;
double r54190 = y_im;
double r54191 = r54189 * r54190;
double r54192 = r54188 - r54191;
double r54193 = r54187 * r54187;
double r54194 = r54190 * r54190;
double r54195 = r54193 + r54194;
double r54196 = r54192 / r54195;
return r54196;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r54197 = x_im;
double r54198 = y_re;
double r54199 = r54197 * r54198;
double r54200 = r54198 * r54198;
double r54201 = y_im;
double r54202 = r54201 * r54201;
double r54203 = r54200 + r54202;
double r54204 = r54199 / r54203;
double r54205 = x_re;
double r54206 = sqrt(r54203);
double r54207 = r54205 / r54206;
double r54208 = r54201 / r54206;
double r54209 = r54207 * r54208;
double r54210 = r54204 - r54209;
return r54210;
}



Bits error versus x.re



Bits error versus x.im



Bits error versus y.re



Bits error versus y.im
Results
Initial program 26.2
rmApplied div-sub26.2
rmApplied add-sqr-sqrt26.2
Applied times-frac24.7
Final simplification24.7
herbie shell --seed 2019325
(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))))