Average Error: 25.8 → 25.8
Time: 21.8s
Precision: 64
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{\frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot 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 r2364350 = x_re;
        double r2364351 = y_re;
        double r2364352 = r2364350 * r2364351;
        double r2364353 = x_im;
        double r2364354 = y_im;
        double r2364355 = r2364353 * r2364354;
        double r2364356 = r2364352 + r2364355;
        double r2364357 = r2364351 * r2364351;
        double r2364358 = r2364354 * r2364354;
        double r2364359 = r2364357 + r2364358;
        double r2364360 = r2364356 / r2364359;
        return r2364360;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2364361 = x_im;
        double r2364362 = y_im;
        double r2364363 = r2364361 * r2364362;
        double r2364364 = x_re;
        double r2364365 = y_re;
        double r2364366 = r2364364 * r2364365;
        double r2364367 = r2364363 + r2364366;
        double r2364368 = r2364365 * r2364365;
        double r2364369 = r2364362 * r2364362;
        double r2364370 = r2364368 + r2364369;
        double r2364371 = sqrt(r2364370);
        double r2364372 = r2364367 / r2364371;
        double r2364373 = r2364372 / r2364371;
        return r2364373;
}

\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{\frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Derivation

  1. Initial program 25.8

    \[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt25.8

    \[\leadsto \frac{x.re \cdot y.re + x.im \cdot y.im}{\color{blue}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
  4. Applied associate-/r*25.8

    \[\leadsto \color{blue}{\frac{\frac{x.re \cdot y.re + x.im \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
  5. Final simplification25.8

    \[\leadsto \frac{\frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]

Reproduce

herbie shell --seed 2019101 
(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))))