Average Error: 25.8 → 25.8
Time: 15.0s
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}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)}{\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}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \left(x.im \cdot y.im + x.re \cdot y.re\right)}{\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 r2554282 = x_re;
        double r2554283 = y_re;
        double r2554284 = r2554282 * r2554283;
        double r2554285 = x_im;
        double r2554286 = y_im;
        double r2554287 = r2554285 * r2554286;
        double r2554288 = r2554284 + r2554287;
        double r2554289 = r2554283 * r2554283;
        double r2554290 = r2554286 * r2554286;
        double r2554291 = r2554289 + r2554290;
        double r2554292 = r2554288 / r2554291;
        return r2554292;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2554293 = 1.0;
        double r2554294 = y_re;
        double r2554295 = r2554294 * r2554294;
        double r2554296 = y_im;
        double r2554297 = r2554296 * r2554296;
        double r2554298 = r2554295 + r2554297;
        double r2554299 = sqrt(r2554298);
        double r2554300 = r2554293 / r2554299;
        double r2554301 = x_im;
        double r2554302 = r2554301 * r2554296;
        double r2554303 = x_re;
        double r2554304 = r2554303 * r2554294;
        double r2554305 = r2554302 + r2554304;
        double r2554306 = r2554300 * r2554305;
        double r2554307 = r2554306 / r2554299;
        return r2554307;
}

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.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. Using strategy rm
  6. Applied div-inv25.8

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

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

Reproduce

herbie shell --seed 2019139 +o rules:numerics
(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))))