Average Error: 25.7 → 25.6
Time: 19.6s
Precision: 64
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\begin{array}{l} \mathbf{if}\;y.im \le 6.646276389058437 \cdot 10^{+117}:\\ \;\;\;\;\frac{\frac{x.re \cdot y.re + y.im \cdot x.im}{\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.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\ \end{array}\]
\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\begin{array}{l}
\mathbf{if}\;y.im \le 6.646276389058437 \cdot 10^{+117}:\\
\;\;\;\;\frac{\frac{x.re \cdot y.re + y.im \cdot x.im}{\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.im}{\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 r2778050 = x_re;
        double r2778051 = y_re;
        double r2778052 = r2778050 * r2778051;
        double r2778053 = x_im;
        double r2778054 = y_im;
        double r2778055 = r2778053 * r2778054;
        double r2778056 = r2778052 + r2778055;
        double r2778057 = r2778051 * r2778051;
        double r2778058 = r2778054 * r2778054;
        double r2778059 = r2778057 + r2778058;
        double r2778060 = r2778056 / r2778059;
        return r2778060;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2778061 = y_im;
        double r2778062 = 6.646276389058437e+117;
        bool r2778063 = r2778061 <= r2778062;
        double r2778064 = x_re;
        double r2778065 = y_re;
        double r2778066 = r2778064 * r2778065;
        double r2778067 = x_im;
        double r2778068 = r2778061 * r2778067;
        double r2778069 = r2778066 + r2778068;
        double r2778070 = r2778061 * r2778061;
        double r2778071 = r2778065 * r2778065;
        double r2778072 = r2778070 + r2778071;
        double r2778073 = sqrt(r2778072);
        double r2778074 = r2778069 / r2778073;
        double r2778075 = r2778074 / r2778073;
        double r2778076 = r2778067 / r2778073;
        double r2778077 = r2778063 ? r2778075 : r2778076;
        return r2778077;
}

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 < 6.646276389058437e+117

    1. Initial program 22.5

      \[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt22.5

      \[\leadsto \frac{x.re \cdot y.re + x.im \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.5

      \[\leadsto \color{blue}{\frac{\frac{x.re \cdot y.re + x.im \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 6.646276389058437e+117 < y.im

    1. Initial program 42.3

      \[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt42.3

      \[\leadsto \frac{x.re \cdot y.re + x.im \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*42.2

      \[\leadsto \color{blue}{\frac{\frac{x.re \cdot y.re + x.im \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 41.5

      \[\leadsto \frac{\color{blue}{x.im}}{\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 6.646276389058437 \cdot 10^{+117}:\\ \;\;\;\;\frac{\frac{x.re \cdot y.re + y.im \cdot x.im}{\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.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019107 
(FPCore (x.re x.im y.re y.im)
  :name "_divideComplex, real part"
  (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))))