Average Error: 26.2 → 26.2
Time: 5.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 4.45466791069368503819326346032185071724 \cdot 10^{108}:\\ \;\;\;\;\frac{\left(x.im \cdot y.re - x.re \cdot y.im\right) \cdot \frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{elif}\;y.im \le 4.152810026092194573941460896261674354973 \cdot 10^{143}:\\ \;\;\;\;\frac{-1 \cdot x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\left|\sqrt[3]{y.re \cdot y.re + y.im \cdot y.im}\right| \cdot \sqrt{\sqrt[3]{y.re \cdot y.re + y.im \cdot 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 4.45466791069368503819326346032185071724 \cdot 10^{108}:\\
\;\;\;\;\frac{\left(x.im \cdot y.re - x.re \cdot y.im\right) \cdot \frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\

\mathbf{elif}\;y.im \le 4.152810026092194573941460896261674354973 \cdot 10^{143}:\\
\;\;\;\;\frac{-1 \cdot x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\left|\sqrt[3]{y.re \cdot y.re + y.im \cdot y.im}\right| \cdot \sqrt{\sqrt[3]{y.re \cdot y.re + y.im \cdot y.im}}}\\

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r111760 = x_im;
        double r111761 = y_re;
        double r111762 = r111760 * r111761;
        double r111763 = x_re;
        double r111764 = y_im;
        double r111765 = r111763 * r111764;
        double r111766 = r111762 - r111765;
        double r111767 = r111761 * r111761;
        double r111768 = r111764 * r111764;
        double r111769 = r111767 + r111768;
        double r111770 = r111766 / r111769;
        return r111770;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r111771 = y_im;
        double r111772 = 4.454667910693685e+108;
        bool r111773 = r111771 <= r111772;
        double r111774 = x_im;
        double r111775 = y_re;
        double r111776 = r111774 * r111775;
        double r111777 = x_re;
        double r111778 = r111777 * r111771;
        double r111779 = r111776 - r111778;
        double r111780 = 1.0;
        double r111781 = r111775 * r111775;
        double r111782 = r111771 * r111771;
        double r111783 = r111781 + r111782;
        double r111784 = sqrt(r111783);
        double r111785 = r111780 / r111784;
        double r111786 = r111779 * r111785;
        double r111787 = r111786 / r111784;
        double r111788 = 4.152810026092195e+143;
        bool r111789 = r111771 <= r111788;
        double r111790 = -1.0;
        double r111791 = r111790 * r111777;
        double r111792 = r111791 / r111784;
        double r111793 = r111779 / r111784;
        double r111794 = cbrt(r111783);
        double r111795 = fabs(r111794);
        double r111796 = sqrt(r111794);
        double r111797 = r111795 * r111796;
        double r111798 = r111793 / r111797;
        double r111799 = r111789 ? r111792 : r111798;
        double r111800 = r111773 ? r111787 : r111799;
        return r111800;
}

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 3 regimes
  2. if y.im < 4.454667910693685e+108

    1. Initial program 23.2

      \[\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-sqrt23.2

      \[\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 associate-/r*23.1

      \[\leadsto \color{blue}{\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
    5. Using strategy rm
    6. Applied div-inv23.2

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

    if 4.454667910693685e+108 < y.im < 4.152810026092195e+143

    1. Initial program 23.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-sqrt23.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. Applied associate-/r*23.5

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

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

    if 4.152810026092195e+143 < y.im

    1. Initial program 43.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-sqrt43.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. Applied associate-/r*43.8

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

      \[\leadsto \frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{\color{blue}{\left(\sqrt[3]{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt[3]{y.re \cdot y.re + y.im \cdot y.im}\right) \cdot \sqrt[3]{y.re \cdot y.re + y.im \cdot y.im}}}}\]
    7. Applied sqrt-prod43.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le 4.45466791069368503819326346032185071724 \cdot 10^{108}:\\ \;\;\;\;\frac{\left(x.im \cdot y.re - x.re \cdot y.im\right) \cdot \frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{elif}\;y.im \le 4.152810026092194573941460896261674354973 \cdot 10^{143}:\\ \;\;\;\;\frac{-1 \cdot x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\left|\sqrt[3]{y.re \cdot y.re + y.im \cdot y.im}\right| \cdot \sqrt{\sqrt[3]{y.re \cdot y.re + y.im \cdot y.im}}}\\ \end{array}\]

Reproduce

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