Average Error: 26.5 → 8.6
Time: 3.8s
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 -1.351214721549483218261281106569258966909 \cdot 10^{154} \lor \neg \left(y.im \le 8.000358861136643239312158095843514305232 \cdot 10^{153}\right):\\ \;\;\;\;\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \frac{x.re}{\frac{{y.re}^{2}}{y.im} + y.im}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\\ \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 -1.351214721549483218261281106569258966909 \cdot 10^{154} \lor \neg \left(y.im \le 8.000358861136643239312158095843514305232 \cdot 10^{153}\right):\\
\;\;\;\;\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \frac{x.re}{\frac{{y.re}^{2}}{y.im} + y.im}\\

\mathbf{else}:\\
\;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\\

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r69611 = x_im;
        double r69612 = y_re;
        double r69613 = r69611 * r69612;
        double r69614 = x_re;
        double r69615 = y_im;
        double r69616 = r69614 * r69615;
        double r69617 = r69613 - r69616;
        double r69618 = r69612 * r69612;
        double r69619 = r69615 * r69615;
        double r69620 = r69618 + r69619;
        double r69621 = r69617 / r69620;
        return r69621;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r69622 = y_im;
        double r69623 = -1.3512147215494832e+154;
        bool r69624 = r69622 <= r69623;
        double r69625 = 8.000358861136643e+153;
        bool r69626 = r69622 <= r69625;
        double r69627 = !r69626;
        bool r69628 = r69624 || r69627;
        double r69629 = x_im;
        double r69630 = y_re;
        double r69631 = r69630 * r69630;
        double r69632 = r69622 * r69622;
        double r69633 = r69631 + r69632;
        double r69634 = r69633 / r69630;
        double r69635 = r69629 / r69634;
        double r69636 = x_re;
        double r69637 = 2.0;
        double r69638 = pow(r69630, r69637);
        double r69639 = r69638 / r69622;
        double r69640 = r69639 + r69622;
        double r69641 = r69636 / r69640;
        double r69642 = r69635 - r69641;
        double r69643 = pow(r69622, r69637);
        double r69644 = r69643 / r69630;
        double r69645 = r69630 + r69644;
        double r69646 = r69629 / r69645;
        double r69647 = r69633 / r69622;
        double r69648 = r69636 / r69647;
        double r69649 = r69646 - r69648;
        double r69650 = r69628 ? r69642 : r69649;
        return r69650;
}

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 < -1.3512147215494832e+154 or 8.000358861136643e+153 < y.im

    1. Initial program 46.6

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

      \[\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. Using strategy rm
    5. Applied div-sub46.6

      \[\leadsto \color{blue}{\frac{x.im \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}} - \frac{x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
    6. Simplified46.4

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

      \[\leadsto \frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \color{blue}{\frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}}\]
    8. Taylor expanded around 0 16.8

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

    if -1.3512147215494832e+154 < y.im < 8.000358861136643e+153

    1. Initial program 18.8

      \[\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-sqrt18.8

      \[\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. Using strategy rm
    5. Applied div-sub18.8

      \[\leadsto \color{blue}{\frac{x.im \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}} - \frac{x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
    6. Simplified17.0

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

      \[\leadsto \frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \color{blue}{\frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}}\]
    8. Taylor expanded around 0 5.4

      \[\leadsto \frac{x.im}{\color{blue}{y.re + \frac{{y.im}^{2}}{y.re}}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification8.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le -1.351214721549483218261281106569258966909 \cdot 10^{154} \lor \neg \left(y.im \le 8.000358861136643239312158095843514305232 \cdot 10^{153}\right):\\ \;\;\;\;\frac{x.im}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.re}} - \frac{x.re}{\frac{{y.re}^{2}}{y.im} + y.im}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.im}{y.re + \frac{{y.im}^{2}}{y.re}} - \frac{x.re}{\frac{y.re \cdot y.re + y.im \cdot y.im}{y.im}}\\ \end{array}\]

Reproduce

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