Average Error: 26.1 → 26.0
Time: 38.7s
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 7.672387965946080977078573905755541784636 \cdot 10^{87}:\\ \;\;\;\;\frac{\frac{x.im \cdot y.re - y.im \cdot x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}}{\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 7.672387965946080977078573905755541784636 \cdot 10^{87}:\\
\;\;\;\;\frac{\frac{x.im \cdot y.re - y.im \cdot x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}}{\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 r5032984 = x_im;
        double r5032985 = y_re;
        double r5032986 = r5032984 * r5032985;
        double r5032987 = x_re;
        double r5032988 = y_im;
        double r5032989 = r5032987 * r5032988;
        double r5032990 = r5032986 - r5032989;
        double r5032991 = r5032985 * r5032985;
        double r5032992 = r5032988 * r5032988;
        double r5032993 = r5032991 + r5032992;
        double r5032994 = r5032990 / r5032993;
        return r5032994;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r5032995 = y_im;
        double r5032996 = 7.672387965946081e+87;
        bool r5032997 = r5032995 <= r5032996;
        double r5032998 = x_im;
        double r5032999 = y_re;
        double r5033000 = r5032998 * r5032999;
        double r5033001 = x_re;
        double r5033002 = r5032995 * r5033001;
        double r5033003 = r5033000 - r5033002;
        double r5033004 = r5032995 * r5032995;
        double r5033005 = r5032999 * r5032999;
        double r5033006 = r5033004 + r5033005;
        double r5033007 = sqrt(r5033006);
        double r5033008 = r5033003 / r5033007;
        double r5033009 = r5033008 / r5033007;
        double r5033010 = -r5033001;
        double r5033011 = r5033010 / r5033007;
        double r5033012 = r5032997 ? r5033009 : r5033011;
        return r5033012;
}

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 < 7.672387965946081e+87

    1. Initial program 23.1

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

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

      \[\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}}}\]

    if 7.672387965946081e+87 < y.im

    1. Initial program 38.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-sqrt38.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*38.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. Taylor expanded around 0 38.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le 7.672387965946080977078573905755541784636 \cdot 10^{87}:\\ \;\;\;\;\frac{\frac{x.im \cdot y.re - y.im \cdot x.re}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}}{\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 2019168 
(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))))