Average Error: 25.7 → 25.7
Time: 14.9s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.im \cdot y.re - x.re \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{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.im \cdot y.re - x.re \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 r3042508 = x_im;
        double r3042509 = y_re;
        double r3042510 = r3042508 * r3042509;
        double r3042511 = x_re;
        double r3042512 = y_im;
        double r3042513 = r3042511 * r3042512;
        double r3042514 = r3042510 - r3042513;
        double r3042515 = r3042509 * r3042509;
        double r3042516 = r3042512 * r3042512;
        double r3042517 = r3042515 + r3042516;
        double r3042518 = r3042514 / r3042517;
        return r3042518;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r3042519 = 1.0;
        double r3042520 = y_re;
        double r3042521 = r3042520 * r3042520;
        double r3042522 = y_im;
        double r3042523 = r3042522 * r3042522;
        double r3042524 = r3042521 + r3042523;
        double r3042525 = sqrt(r3042524);
        double r3042526 = r3042519 / r3042525;
        double r3042527 = x_im;
        double r3042528 = r3042527 * r3042520;
        double r3042529 = x_re;
        double r3042530 = r3042529 * r3042522;
        double r3042531 = r3042528 - r3042530;
        double r3042532 = r3042531 / r3042525;
        double r3042533 = r3042526 * r3042532;
        return r3042533;
}

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

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

    \[\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 *-un-lft-identity25.7

    \[\leadsto \frac{\color{blue}{1 \cdot \left(x.im \cdot y.re - x.re \cdot y.im\right)}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  5. Applied times-frac25.7

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

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

Reproduce

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