double f(double x_re, double x_im, double y_re, double y_im) {
double r1530402 = x_im;
double r1530403 = y_re;
double r1530404 = r1530402 * r1530403;
double r1530405 = x_re;
double r1530406 = y_im;
double r1530407 = r1530405 * r1530406;
double r1530408 = r1530404 - r1530407;
double r1530409 = r1530403 * r1530403;
double r1530410 = r1530406 * r1530406;
double r1530411 = r1530409 + r1530410;
double r1530412 = r1530408 / r1530411;
return r1530412;
}
double f(double x_re, double x_im, double y_re, double y_im) {
double r1530413 = 1.0;
double r1530414 = y_re;
double r1530415 = r1530414 * r1530414;
double r1530416 = y_im;
double r1530417 = r1530416 * r1530416;
double r1530418 = r1530415 + r1530417;
double r1530419 = x_im;
double r1530420 = r1530419 * r1530414;
double r1530421 = x_re;
double r1530422 = r1530421 * r1530416;
double r1530423 = r1530420 - r1530422;
double r1530424 = r1530418 / r1530423;
double r1530425 = r1530413 / r1530424;
return r1530425;
}
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\frac{1.0}{\frac{y.re \cdot y.re + y.im \cdot y.im}{x.im \cdot y.re - x.re \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
rmApplied p16-flip--2.1
rmApplied difference-of-squares2.0
Applied associate-/l*1.1
rmApplied associate-/r/1.1
Applied associate-/l*1.1
Simplified1.1
Final simplification1.1
herbie shell --seed 2019102
(FPCore (x.re x.im y.re y.im)
:name "_divideComplex, imaginary part"
(/.p16 (-.p16 (*.p16 x.im y.re) (*.p16 x.re y.im)) (+.p16 (*.p16 y.re y.re) (*.p16 y.im y.im))))