Average Error: 26.6 → 26.9
Time: 9.0s
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.re \le 2.66647901449877398 \cdot 10^{55}:\\ \;\;\;\;\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}}\\ \mathbf{elif}\;y.re \le 1.302160936926946 \cdot 10^{147}:\\ \;\;\;\;\frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{{y.im}^{2} + {y.re}^{2}}{y.re \cdot x.re + y.im \cdot x.im}}\\ \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.re \le 2.66647901449877398 \cdot 10^{55}:\\
\;\;\;\;\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}}\\

\mathbf{elif}\;y.re \le 1.302160936926946 \cdot 10^{147}:\\
\;\;\;\;\frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\

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

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r49072 = x_re;
        double r49073 = y_re;
        double r49074 = r49072 * r49073;
        double r49075 = x_im;
        double r49076 = y_im;
        double r49077 = r49075 * r49076;
        double r49078 = r49074 + r49077;
        double r49079 = r49073 * r49073;
        double r49080 = r49076 * r49076;
        double r49081 = r49079 + r49080;
        double r49082 = r49078 / r49081;
        return r49082;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r49083 = y_re;
        double r49084 = 2.666479014498774e+55;
        bool r49085 = r49083 <= r49084;
        double r49086 = x_re;
        double r49087 = r49086 * r49083;
        double r49088 = x_im;
        double r49089 = y_im;
        double r49090 = r49088 * r49089;
        double r49091 = r49087 + r49090;
        double r49092 = r49083 * r49083;
        double r49093 = r49089 * r49089;
        double r49094 = r49092 + r49093;
        double r49095 = sqrt(r49094);
        double r49096 = r49091 / r49095;
        double r49097 = r49096 / r49095;
        double r49098 = 1.3021609369269456e+147;
        bool r49099 = r49083 <= r49098;
        double r49100 = r49086 / r49095;
        double r49101 = 1.0;
        double r49102 = 2.0;
        double r49103 = pow(r49089, r49102);
        double r49104 = pow(r49083, r49102);
        double r49105 = r49103 + r49104;
        double r49106 = r49083 * r49086;
        double r49107 = r49089 * r49088;
        double r49108 = r49106 + r49107;
        double r49109 = r49105 / r49108;
        double r49110 = r49101 / r49109;
        double r49111 = r49099 ? r49100 : r49110;
        double r49112 = r49085 ? r49097 : r49111;
        return r49112;
}

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 3 regimes
  2. if y.re < 2.666479014498774e+55

    1. Initial program 23.8

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

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

      \[\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 2.666479014498774e+55 < y.re < 1.3021609369269456e+147

    1. Initial program 22.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-sqrt22.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*22.0

      \[\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 inf 26.3

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

    if 1.3021609369269456e+147 < y.re

    1. Initial program 44.8

      \[\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 pow144.8

      \[\leadsto \frac{x.re \cdot y.re + x.im \cdot y.im}{\color{blue}{{\left(y.re \cdot y.re + y.im \cdot y.im\right)}^{1}}}\]
    4. Using strategy rm
    5. Applied clear-num44.8

      \[\leadsto \color{blue}{\frac{1}{\frac{{\left(y.re \cdot y.re + y.im \cdot y.im\right)}^{1}}{x.re \cdot y.re + x.im \cdot y.im}}}\]
    6. Simplified44.8

      \[\leadsto \frac{1}{\color{blue}{\frac{{y.im}^{2} + {y.re}^{2}}{y.re \cdot x.re + y.im \cdot x.im}}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification26.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;y.re \le 2.66647901449877398 \cdot 10^{55}:\\ \;\;\;\;\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}}\\ \mathbf{elif}\;y.re \le 1.302160936926946 \cdot 10^{147}:\\ \;\;\;\;\frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{{y.im}^{2} + {y.re}^{2}}{y.re \cdot x.re + y.im \cdot x.im}}\\ \end{array}\]

Reproduce

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