Average Error: 26.3 → 26.3
Time: 16.9s
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.937670017341036534919481795915749319496 \cdot 10^{62}:\\ \;\;\;\;\frac{\frac{1}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot \left(x.im \cdot y.re - y.im \cdot x.re\right)}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-x.re}{\sqrt{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 1.937670017341036534919481795915749319496 \cdot 10^{62}:\\
\;\;\;\;\frac{\frac{1}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}} \cdot \left(x.im \cdot y.re - y.im \cdot x.re\right)}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\

\mathbf{else}:\\
\;\;\;\;\frac{-x.re}{\sqrt{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 r3253812 = x_im;
        double r3253813 = y_re;
        double r3253814 = r3253812 * r3253813;
        double r3253815 = x_re;
        double r3253816 = y_im;
        double r3253817 = r3253815 * r3253816;
        double r3253818 = r3253814 - r3253817;
        double r3253819 = r3253813 * r3253813;
        double r3253820 = r3253816 * r3253816;
        double r3253821 = r3253819 + r3253820;
        double r3253822 = r3253818 / r3253821;
        return r3253822;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r3253823 = y_im;
        double r3253824 = 1.9376700173410365e+62;
        bool r3253825 = r3253823 <= r3253824;
        double r3253826 = 1.0;
        double r3253827 = r3253823 * r3253823;
        double r3253828 = y_re;
        double r3253829 = r3253828 * r3253828;
        double r3253830 = r3253827 + r3253829;
        double r3253831 = sqrt(r3253830);
        double r3253832 = r3253826 / r3253831;
        double r3253833 = x_im;
        double r3253834 = r3253833 * r3253828;
        double r3253835 = x_re;
        double r3253836 = r3253823 * r3253835;
        double r3253837 = r3253834 - r3253836;
        double r3253838 = r3253832 * r3253837;
        double r3253839 = r3253838 / r3253831;
        double r3253840 = -r3253835;
        double r3253841 = r3253840 / r3253831;
        double r3253842 = r3253825 ? r3253839 : r3253841;
        return r3253842;
}

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.9376700173410365e+62

    1. Initial program 23.4

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

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

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

      \[\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 1.9376700173410365e+62 < y.im

    1. Initial program 37.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 add-sqr-sqrt37.3

      \[\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*37.2

      \[\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 37.5

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

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

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

Reproduce

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