Average Error: 25.8 → 25.8
Time: 14.2s
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 r2532386 = x_re;
        double r2532387 = y_re;
        double r2532388 = r2532386 * r2532387;
        double r2532389 = x_im;
        double r2532390 = y_im;
        double r2532391 = r2532389 * r2532390;
        double r2532392 = r2532388 + r2532391;
        double r2532393 = r2532387 * r2532387;
        double r2532394 = r2532390 * r2532390;
        double r2532395 = r2532393 + r2532394;
        double r2532396 = r2532392 / r2532395;
        return r2532396;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2532397 = 1.0;
        double r2532398 = y_re;
        double r2532399 = r2532398 * r2532398;
        double r2532400 = y_im;
        double r2532401 = r2532400 * r2532400;
        double r2532402 = r2532399 + r2532401;
        double r2532403 = sqrt(r2532402);
        double r2532404 = r2532397 / r2532403;
        double r2532405 = x_im;
        double r2532406 = r2532405 * r2532400;
        double r2532407 = x_re;
        double r2532408 = r2532407 * r2532398;
        double r2532409 = r2532406 + r2532408;
        double r2532410 = r2532404 * r2532409;
        double r2532411 = r2532410 / r2532403;
        return r2532411;
}

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 
(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))))