Average Error: 25.7 → 25.6
Time: 17.4s
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.672387965946081 \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.672387965946081 \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 r2955722 = x_im;
        double r2955723 = y_re;
        double r2955724 = r2955722 * r2955723;
        double r2955725 = x_re;
        double r2955726 = y_im;
        double r2955727 = r2955725 * r2955726;
        double r2955728 = r2955724 - r2955727;
        double r2955729 = r2955723 * r2955723;
        double r2955730 = r2955726 * r2955726;
        double r2955731 = r2955729 + r2955730;
        double r2955732 = r2955728 / r2955731;
        return r2955732;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2955733 = y_im;
        double r2955734 = 7.672387965946081e+87;
        bool r2955735 = r2955733 <= r2955734;
        double r2955736 = x_im;
        double r2955737 = y_re;
        double r2955738 = r2955736 * r2955737;
        double r2955739 = x_re;
        double r2955740 = r2955733 * r2955739;
        double r2955741 = r2955738 - r2955740;
        double r2955742 = r2955733 * r2955733;
        double r2955743 = r2955737 * r2955737;
        double r2955744 = r2955742 + r2955743;
        double r2955745 = sqrt(r2955744);
        double r2955746 = r2955741 / r2955745;
        double r2955747 = r2955746 / r2955745;
        double r2955748 = -r2955739;
        double r2955749 = r2955748 / r2955745;
        double r2955750 = r2955735 ? r2955747 : r2955749;
        return r2955750;
}

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 22.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 add-sqr-sqrt22.7

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

      \[\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.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-sqrt38.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*38.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 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 simplification25.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.im \le 7.672387965946081 \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))))