Average Error: 26.2 → 26.2
Time: 3.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{\left(x.im \cdot y.re - x.re \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}}\]
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{\left(x.im \cdot y.re - x.re \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}}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r110383 = x_im;
        double r110384 = y_re;
        double r110385 = r110383 * r110384;
        double r110386 = x_re;
        double r110387 = y_im;
        double r110388 = r110386 * r110387;
        double r110389 = r110385 - r110388;
        double r110390 = r110384 * r110384;
        double r110391 = r110387 * r110387;
        double r110392 = r110390 + r110391;
        double r110393 = r110389 / r110392;
        return r110393;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r110394 = x_im;
        double r110395 = y_re;
        double r110396 = r110394 * r110395;
        double r110397 = x_re;
        double r110398 = y_im;
        double r110399 = r110397 * r110398;
        double r110400 = r110396 - r110399;
        double r110401 = 1.0;
        double r110402 = r110395 * r110395;
        double r110403 = r110398 * r110398;
        double r110404 = r110402 + r110403;
        double r110405 = sqrt(r110404);
        double r110406 = r110401 / r110405;
        double r110407 = r110400 * r110406;
        double r110408 = r110407 / r110405;
        return r110408;
}

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

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

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

    \[\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-inv26.2

    \[\leadsto \frac{\color{blue}{\left(x.im \cdot y.re - x.re \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 simplification26.2

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

Reproduce

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