Average Error: 25.6 → 25.1
Time: 42.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}\;\frac{x.im \cdot y.im + x.re \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} \le 6.142565536588697 \cdot 10^{+301}:\\ \;\;\;\;\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot x.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}\;\frac{x.im \cdot y.im + x.re \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} \le 6.142565536588697 \cdot 10^{+301}:\\
\;\;\;\;\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\

\mathbf{else}:\\
\;\;\;\;\frac{-1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot x.re\\

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r6730025 = x_re;
        double r6730026 = y_re;
        double r6730027 = r6730025 * r6730026;
        double r6730028 = x_im;
        double r6730029 = y_im;
        double r6730030 = r6730028 * r6730029;
        double r6730031 = r6730027 + r6730030;
        double r6730032 = r6730026 * r6730026;
        double r6730033 = r6730029 * r6730029;
        double r6730034 = r6730032 + r6730033;
        double r6730035 = r6730031 / r6730034;
        return r6730035;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r6730036 = x_im;
        double r6730037 = y_im;
        double r6730038 = r6730036 * r6730037;
        double r6730039 = x_re;
        double r6730040 = y_re;
        double r6730041 = r6730039 * r6730040;
        double r6730042 = r6730038 + r6730041;
        double r6730043 = r6730040 * r6730040;
        double r6730044 = r6730037 * r6730037;
        double r6730045 = r6730043 + r6730044;
        double r6730046 = r6730042 / r6730045;
        double r6730047 = 6.142565536588697e+301;
        bool r6730048 = r6730046 <= r6730047;
        double r6730049 = 1.0;
        double r6730050 = sqrt(r6730045);
        double r6730051 = r6730049 / r6730050;
        double r6730052 = r6730042 / r6730050;
        double r6730053 = r6730051 * r6730052;
        double r6730054 = -1.0;
        double r6730055 = r6730054 / r6730050;
        double r6730056 = r6730055 * r6730039;
        double r6730057 = r6730048 ? r6730053 : r6730056;
        return r6730057;
}

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 (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) < 6.142565536588697e+301

    1. Initial program 14.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-sqrt14.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 *-un-lft-identity14.1

      \[\leadsto \frac{\color{blue}{1 \cdot \left(x.re \cdot y.re + x.im \cdot y.im\right)}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    5. Applied times-frac14.1

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

    if 6.142565536588697e+301 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im)))

    1. Initial program 62.2

      \[\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-sqrt62.2

      \[\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 *-un-lft-identity62.2

      \[\leadsto \frac{\color{blue}{1 \cdot \left(x.re \cdot y.re + x.im \cdot y.im\right)}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    5. Applied times-frac62.2

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

      \[\leadsto \frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \color{blue}{\left(-1 \cdot x.re\right)}\]
    7. Simplified60.0

      \[\leadsto \frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \color{blue}{\left(-x.re\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification25.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{x.im \cdot y.im + x.re \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} \le 6.142565536588697 \cdot 10^{+301}:\\ \;\;\;\;\frac{1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-1}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot x.re\\ \end{array}\]

Reproduce

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