Average Error: 26.5 → 25.3
Time: 3.9s
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.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} = -\infty:\\ \;\;\;\;\frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\ \mathbf{elif}\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 5.93953377056499191 \cdot 10^{289}:\\ \;\;\;\;\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{else}:\\ \;\;\;\;\frac{-1 \cdot x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.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}\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} = -\infty:\\
\;\;\;\;\frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\

\mathbf{elif}\;\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 5.93953377056499191 \cdot 10^{289}:\\
\;\;\;\;\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{else}:\\
\;\;\;\;\frac{-1 \cdot x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r58628 = x_re;
        double r58629 = y_re;
        double r58630 = r58628 * r58629;
        double r58631 = x_im;
        double r58632 = y_im;
        double r58633 = r58631 * r58632;
        double r58634 = r58630 + r58633;
        double r58635 = r58629 * r58629;
        double r58636 = r58632 * r58632;
        double r58637 = r58635 + r58636;
        double r58638 = r58634 / r58637;
        return r58638;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r58639 = x_re;
        double r58640 = y_re;
        double r58641 = r58639 * r58640;
        double r58642 = x_im;
        double r58643 = y_im;
        double r58644 = r58642 * r58643;
        double r58645 = r58641 + r58644;
        double r58646 = r58640 * r58640;
        double r58647 = r58643 * r58643;
        double r58648 = r58646 + r58647;
        double r58649 = r58645 / r58648;
        double r58650 = -inf.0;
        bool r58651 = r58649 <= r58650;
        double r58652 = sqrt(r58648);
        double r58653 = r58639 / r58652;
        double r58654 = 5.939533770564992e+289;
        bool r58655 = r58649 <= r58654;
        double r58656 = r58645 / r58652;
        double r58657 = r58656 / r58652;
        double r58658 = -1.0;
        double r58659 = r58658 * r58639;
        double r58660 = r58659 / r58652;
        double r58661 = r58655 ? r58657 : r58660;
        double r58662 = r58651 ? r58653 : r58661;
        return r58662;
}

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 (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) < -inf.0

    1. Initial program 64.0

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

      \[\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*64.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 50.1

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

    if -inf.0 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im))) < 5.939533770564992e+289

    1. Initial program 12.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-sqrt12.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*12.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}}}\]

    if 5.939533770564992e+289 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im)))

    1. Initial program 62.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-sqrt62.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*62.8

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

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

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

Reproduce

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