Average Error: 26.0 → 25.9
Time: 10.0s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{\frac{1}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.re \cdot x.im - y.im \cdot x.re}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{\frac{1}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.re \cdot x.im - y.im \cdot x.re}}}{\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 r1306456 = x_im;
        double r1306457 = y_re;
        double r1306458 = r1306456 * r1306457;
        double r1306459 = x_re;
        double r1306460 = y_im;
        double r1306461 = r1306459 * r1306460;
        double r1306462 = r1306458 - r1306461;
        double r1306463 = r1306457 * r1306457;
        double r1306464 = r1306460 * r1306460;
        double r1306465 = r1306463 + r1306464;
        double r1306466 = r1306462 / r1306465;
        return r1306466;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1306467 = 1.0;
        double r1306468 = y_re;
        double r1306469 = r1306468 * r1306468;
        double r1306470 = y_im;
        double r1306471 = r1306470 * r1306470;
        double r1306472 = r1306469 + r1306471;
        double r1306473 = sqrt(r1306472);
        double r1306474 = x_im;
        double r1306475 = r1306468 * r1306474;
        double r1306476 = x_re;
        double r1306477 = r1306470 * r1306476;
        double r1306478 = r1306475 - r1306477;
        double r1306479 = r1306473 / r1306478;
        double r1306480 = r1306467 / r1306479;
        double r1306481 = r1306480 / r1306473;
        return r1306481;
}

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.0

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

    \[\leadsto \frac{x.im \cdot y.re - x.re \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.9

    \[\leadsto \color{blue}{\frac{\frac{x.im \cdot y.re - x.re \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 clear-num25.9

    \[\leadsto \frac{\color{blue}{\frac{1}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{x.im \cdot y.re - x.re \cdot y.im}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  7. Final simplification25.9

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

Reproduce

herbie shell --seed 2019156 
(FPCore (x.re x.im y.re y.im)
  :name "_divideComplex, imaginary part"
  (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))