Average Error: 25.5 → 23.8
Time: 3.6s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{x.im \cdot \frac{y.re}{\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.im}{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{x.im \cdot \frac{y.re}{\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.im}{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 r108425 = x_im;
        double r108426 = y_re;
        double r108427 = r108425 * r108426;
        double r108428 = x_re;
        double r108429 = y_im;
        double r108430 = r108428 * r108429;
        double r108431 = r108427 - r108430;
        double r108432 = r108426 * r108426;
        double r108433 = r108429 * r108429;
        double r108434 = r108432 + r108433;
        double r108435 = r108431 / r108434;
        return r108435;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r108436 = x_im;
        double r108437 = y_re;
        double r108438 = r108437 * r108437;
        double r108439 = y_im;
        double r108440 = r108439 * r108439;
        double r108441 = r108438 + r108440;
        double r108442 = sqrt(r108441);
        double r108443 = r108437 / r108442;
        double r108444 = r108436 * r108443;
        double r108445 = r108444 / r108442;
        double r108446 = x_re;
        double r108447 = r108446 * r108439;
        double r108448 = r108447 / r108441;
        double r108449 = r108445 - r108448;
        return r108449;
}

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

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

    \[\leadsto \color{blue}{\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}}\]
  4. Using strategy rm
  5. Applied add-sqr-sqrt25.5

    \[\leadsto \frac{x.im \cdot y.re}{\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}}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
  6. Applied times-frac24.3

    \[\leadsto \color{blue}{\frac{x.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
  7. Using strategy rm
  8. Applied associate-*r/24.2

    \[\leadsto \color{blue}{\frac{\frac{x.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
  9. Simplified23.8

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

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

Reproduce

herbie shell --seed 2020035 
(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))))