Average Error: 25.6 → 22.4
Time: 12.6s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\begin{array}{l} \mathbf{if}\;y.im \le -3.660481816459021646058030108492220670906 \cdot 10^{-156} \lor \neg \left(y.im \le 3.297289885168792012073579345208696767758 \cdot 10^{91}\right):\\ \;\;\;\;\frac{y.re}{y.im \cdot y.im + y.re \cdot y.re} \cdot x.im - \frac{y.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot \frac{x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\ \mathbf{else}:\\ \;\;\;\;\left(x.im \cdot \frac{y.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\right) \cdot \frac{1}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} - \frac{y.im \cdot x.re}{y.im \cdot y.im + y.re \cdot y.re}\\ \end{array}\]
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\begin{array}{l}
\mathbf{if}\;y.im \le -3.660481816459021646058030108492220670906 \cdot 10^{-156} \lor \neg \left(y.im \le 3.297289885168792012073579345208696767758 \cdot 10^{91}\right):\\
\;\;\;\;\frac{y.re}{y.im \cdot y.im + y.re \cdot y.re} \cdot x.im - \frac{y.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot \frac{x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\

\mathbf{else}:\\
\;\;\;\;\left(x.im \cdot \frac{y.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\right) \cdot \frac{1}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} - \frac{y.im \cdot x.re}{y.im \cdot y.im + y.re \cdot y.re}\\

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r59606 = x_im;
        double r59607 = y_re;
        double r59608 = r59606 * r59607;
        double r59609 = x_re;
        double r59610 = y_im;
        double r59611 = r59609 * r59610;
        double r59612 = r59608 - r59611;
        double r59613 = r59607 * r59607;
        double r59614 = r59610 * r59610;
        double r59615 = r59613 + r59614;
        double r59616 = r59612 / r59615;
        return r59616;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r59617 = y_im;
        double r59618 = -3.6604818164590216e-156;
        bool r59619 = r59617 <= r59618;
        double r59620 = 3.297289885168792e+91;
        bool r59621 = r59617 <= r59620;
        double r59622 = !r59621;
        bool r59623 = r59619 || r59622;
        double r59624 = y_re;
        double r59625 = r59617 * r59617;
        double r59626 = r59624 * r59624;
        double r59627 = r59625 + r59626;
        double r59628 = r59624 / r59627;
        double r59629 = x_im;
        double r59630 = r59628 * r59629;
        double r59631 = sqrt(r59627);
        double r59632 = r59617 / r59631;
        double r59633 = x_re;
        double r59634 = r59633 / r59631;
        double r59635 = r59632 * r59634;
        double r59636 = r59630 - r59635;
        double r59637 = r59624 / r59631;
        double r59638 = r59629 * r59637;
        double r59639 = 1.0;
        double r59640 = r59639 / r59631;
        double r59641 = r59638 * r59640;
        double r59642 = r59617 * r59633;
        double r59643 = r59642 / r59627;
        double r59644 = r59641 - r59643;
        double r59645 = r59623 ? r59636 : r59644;
        return r59645;
}

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. Split input into 2 regimes
  2. if y.im < -3.6604818164590216e-156 or 3.297289885168792e+91 < y.im

    1. Initial program 29.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 div-sub29.7

      \[\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. Simplified29.0

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

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

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

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

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

    if -3.6604818164590216e-156 < y.im < 3.297289885168792e+91

    1. Initial program 20.3

      \[\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-sub20.3

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

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

      \[\leadsto \frac{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}}} \cdot x.im - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    7. Applied *-un-lft-identity17.6

      \[\leadsto \frac{\color{blue}{1 \cdot y.re}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot x.im - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    8. Applied times-frac17.6

      \[\leadsto \color{blue}{\left(\frac{1}{\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}}\right)} \cdot x.im - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    9. Applied associate-*l*17.6

      \[\leadsto \color{blue}{\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \left(\frac{y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot x.im\right)} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    10. Simplified17.6

      \[\leadsto \frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \color{blue}{\left(\frac{y.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot x.im\right)} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification22.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le -3.660481816459021646058030108492220670906 \cdot 10^{-156} \lor \neg \left(y.im \le 3.297289885168792012073579345208696767758 \cdot 10^{91}\right):\\ \;\;\;\;\frac{y.re}{y.im \cdot y.im + y.re \cdot y.re} \cdot x.im - \frac{y.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot \frac{x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\ \mathbf{else}:\\ \;\;\;\;\left(x.im \cdot \frac{y.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\right) \cdot \frac{1}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} - \frac{y.im \cdot x.re}{y.im \cdot y.im + y.re \cdot y.re}\\ \end{array}\]

Reproduce

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