Average Error: 25.8 → 26.0
Time: 15.1s
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 -1.300179201415138562389146100214075083549 \cdot 10^{53}:\\ \;\;\;\;-\frac{x.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\ \mathbf{else}:\\ \;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{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 -1.300179201415138562389146100214075083549 \cdot 10^{53}:\\
\;\;\;\;-\frac{x.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\

\mathbf{else}:\\
\;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{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 r51852 = x_re;
        double r51853 = y_re;
        double r51854 = r51852 * r51853;
        double r51855 = x_im;
        double r51856 = y_im;
        double r51857 = r51855 * r51856;
        double r51858 = r51854 + r51857;
        double r51859 = r51853 * r51853;
        double r51860 = r51856 * r51856;
        double r51861 = r51859 + r51860;
        double r51862 = r51858 / r51861;
        return r51862;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r51863 = y_im;
        double r51864 = -1.3001792014151386e+53;
        bool r51865 = r51863 <= r51864;
        double r51866 = x_im;
        double r51867 = r51863 * r51863;
        double r51868 = y_re;
        double r51869 = r51868 * r51868;
        double r51870 = r51867 + r51869;
        double r51871 = sqrt(r51870);
        double r51872 = r51866 / r51871;
        double r51873 = -r51872;
        double r51874 = x_re;
        double r51875 = r51874 * r51868;
        double r51876 = r51866 * r51863;
        double r51877 = r51875 + r51876;
        double r51878 = r51877 / r51870;
        double r51879 = r51865 ? r51873 : r51878;
        return r51879;
}

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.3001792014151386e+53

    1. Initial program 35.6

      \[\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-sqrt35.6

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

      \[\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. Simplified35.6

      \[\leadsto \frac{\color{blue}{\frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    6. Taylor expanded around -inf 36.7

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

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

    if -1.3001792014151386e+53 < y.im

    1. Initial program 23.1

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

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

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

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

      \[\leadsto \frac{\color{blue}{\left(x.im \cdot y.im + x.re \cdot y.re\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}}\]
    8. Applied associate-/l*23.2

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

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

Reproduce

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