Average Error: 25.6 → 22.4
Time: 12.2s
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 r53462 = x_im;
        double r53463 = y_re;
        double r53464 = r53462 * r53463;
        double r53465 = x_re;
        double r53466 = y_im;
        double r53467 = r53465 * r53466;
        double r53468 = r53464 - r53467;
        double r53469 = r53463 * r53463;
        double r53470 = r53466 * r53466;
        double r53471 = r53469 + r53470;
        double r53472 = r53468 / r53471;
        return r53472;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r53473 = y_im;
        double r53474 = -3.6604818164590216e-156;
        bool r53475 = r53473 <= r53474;
        double r53476 = 3.297289885168792e+91;
        bool r53477 = r53473 <= r53476;
        double r53478 = !r53477;
        bool r53479 = r53475 || r53478;
        double r53480 = y_re;
        double r53481 = r53473 * r53473;
        double r53482 = r53480 * r53480;
        double r53483 = r53481 + r53482;
        double r53484 = r53480 / r53483;
        double r53485 = x_im;
        double r53486 = r53484 * r53485;
        double r53487 = sqrt(r53483);
        double r53488 = r53473 / r53487;
        double r53489 = x_re;
        double r53490 = r53489 / r53487;
        double r53491 = r53488 * r53490;
        double r53492 = r53486 - r53491;
        double r53493 = r53480 / r53487;
        double r53494 = r53485 * r53493;
        double r53495 = 1.0;
        double r53496 = r53495 / r53487;
        double r53497 = r53494 * r53496;
        double r53498 = r53473 * r53489;
        double r53499 = r53498 / r53483;
        double r53500 = r53497 - r53499;
        double r53501 = r53479 ? r53492 : r53500;
        return r53501;
}

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