Average Error: 26.5 → 26.5
Time: 3.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{1 \cdot \left(x.re \cdot y.re + x.im \cdot y.im\right)}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{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}
\frac{\frac{1 \cdot \left(x.re \cdot y.re + x.im \cdot y.im\right)}{\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 r59429 = x_re;
        double r59430 = y_re;
        double r59431 = r59429 * r59430;
        double r59432 = x_im;
        double r59433 = y_im;
        double r59434 = r59432 * r59433;
        double r59435 = r59431 + r59434;
        double r59436 = r59430 * r59430;
        double r59437 = r59433 * r59433;
        double r59438 = r59436 + r59437;
        double r59439 = r59435 / r59438;
        return r59439;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r59440 = 1.0;
        double r59441 = x_re;
        double r59442 = y_re;
        double r59443 = r59441 * r59442;
        double r59444 = x_im;
        double r59445 = y_im;
        double r59446 = r59444 * r59445;
        double r59447 = r59443 + r59446;
        double r59448 = r59440 * r59447;
        double r59449 = r59442 * r59442;
        double r59450 = r59445 * r59445;
        double r59451 = r59449 + r59450;
        double r59452 = sqrt(r59451);
        double r59453 = r59448 / r59452;
        double r59454 = r59453 / r59452;
        return r59454;
}

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 26.5

    \[\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-sqrt26.5

    \[\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*26.5

    \[\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. Using strategy rm
  6. Applied *-un-lft-identity26.5

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

    \[\leadsto \frac{\frac{1 \cdot \left(x.re \cdot y.re + x.im \cdot y.im\right)}{\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 2020027 
(FPCore (x.re x.im y.re y.im)
  :name "_divideComplex, real part"
  :precision binary64
  (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))