Average Error: 26.1 → 26.1
Time: 15.3s
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 r1782606 = x_im;
        double r1782607 = y_re;
        double r1782608 = r1782606 * r1782607;
        double r1782609 = x_re;
        double r1782610 = y_im;
        double r1782611 = r1782609 * r1782610;
        double r1782612 = r1782608 - r1782611;
        double r1782613 = r1782607 * r1782607;
        double r1782614 = r1782610 * r1782610;
        double r1782615 = r1782613 + r1782614;
        double r1782616 = r1782612 / r1782615;
        return r1782616;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1782617 = 1.0;
        double r1782618 = y_re;
        double r1782619 = r1782618 * r1782618;
        double r1782620 = y_im;
        double r1782621 = r1782620 * r1782620;
        double r1782622 = r1782619 + r1782621;
        double r1782623 = sqrt(r1782622);
        double r1782624 = r1782617 / r1782623;
        double r1782625 = x_im;
        double r1782626 = r1782625 * r1782618;
        double r1782627 = x_re;
        double r1782628 = r1782627 * r1782620;
        double r1782629 = r1782626 - r1782628;
        double r1782630 = r1782629 / r1782623;
        double r1782631 = r1782624 * r1782630;
        return r1782631;
}

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

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

    \[\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-identity26.1

    \[\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-frac26.1

    \[\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 simplification26.1

    \[\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 2019146 
(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))))