Average Error: 26.6 → 22.7
Time: 15.2s
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{x.im}{\frac{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}{y.re}} - \frac{y.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \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{x.im}{\frac{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}{y.re}} - \frac{y.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \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 r55571 = x_im;
        double r55572 = y_re;
        double r55573 = r55571 * r55572;
        double r55574 = x_re;
        double r55575 = y_im;
        double r55576 = r55574 * r55575;
        double r55577 = r55573 - r55576;
        double r55578 = r55572 * r55572;
        double r55579 = r55575 * r55575;
        double r55580 = r55578 + r55579;
        double r55581 = r55577 / r55580;
        return r55581;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r55582 = x_im;
        double r55583 = y_im;
        double r55584 = r55583 * r55583;
        double r55585 = y_re;
        double r55586 = r55585 * r55585;
        double r55587 = r55584 + r55586;
        double r55588 = sqrt(r55587);
        double r55589 = r55588 / r55585;
        double r55590 = r55582 / r55589;
        double r55591 = r55583 / r55588;
        double r55592 = x_re;
        double r55593 = r55591 * r55592;
        double r55594 = r55590 - r55593;
        double r55595 = r55586 + r55584;
        double r55596 = sqrt(r55595);
        double r55597 = r55594 / r55596;
        return r55597;
}

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

    \[\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.6

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

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

    \[\leadsto \frac{\color{blue}{\frac{x.im \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} - \frac{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}}\]
  7. Simplified26.5

    \[\leadsto \frac{\color{blue}{\frac{x.im \cdot y.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}} - \frac{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}}\]
  8. Simplified25.1

    \[\leadsto \frac{\frac{x.im \cdot y.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} - \color{blue}{\frac{y.im}{\frac{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}{x.re}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  9. Using strategy rm
  10. Applied associate-/l*23.1

    \[\leadsto \frac{\color{blue}{\frac{x.im}{\frac{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}{y.re}}} - \frac{y.im}{\frac{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}{x.re}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  11. Using strategy rm
  12. Applied associate-/r/22.7

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

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

Reproduce

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