Average Error: 25.6 → 25.7
Time: 16.7s
Precision: 64
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{1}{y.re \cdot y.re + y.im \cdot y.im} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)\]
\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{1}{y.re \cdot y.re + y.im \cdot y.im} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)
double f(double x_re, double x_im, double y_re, double y_im) {
        double r2671533 = x_re;
        double r2671534 = y_re;
        double r2671535 = r2671533 * r2671534;
        double r2671536 = x_im;
        double r2671537 = y_im;
        double r2671538 = r2671536 * r2671537;
        double r2671539 = r2671535 + r2671538;
        double r2671540 = r2671534 * r2671534;
        double r2671541 = r2671537 * r2671537;
        double r2671542 = r2671540 + r2671541;
        double r2671543 = r2671539 / r2671542;
        return r2671543;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2671544 = 1.0;
        double r2671545 = y_re;
        double r2671546 = r2671545 * r2671545;
        double r2671547 = y_im;
        double r2671548 = r2671547 * r2671547;
        double r2671549 = r2671546 + r2671548;
        double r2671550 = r2671544 / r2671549;
        double r2671551 = x_im;
        double r2671552 = r2671551 * r2671547;
        double r2671553 = x_re;
        double r2671554 = r2671553 * r2671545;
        double r2671555 = r2671552 + r2671554;
        double r2671556 = r2671550 * r2671555;
        return r2671556;
}

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 25.6

    \[\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 div-inv25.7

    \[\leadsto \color{blue}{\left(x.re \cdot y.re + x.im \cdot y.im\right) \cdot \frac{1}{y.re \cdot y.re + y.im \cdot y.im}}\]
  4. Final simplification25.7

    \[\leadsto \frac{1}{y.re \cdot y.re + y.im \cdot y.im} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)\]

Reproduce

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