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

\mathbf{elif}\;\frac{x.im \cdot y.im + x.re \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} \le 1.126077854837793543272902488688401092988 \cdot 10^{280}:\\
\;\;\;\;\frac{\frac{1}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{x.im \cdot y.im + x.re \cdot y.re}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\\

\mathbf{else}:\\
\;\;\;\;\frac{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 r42410 = x_re;
        double r42411 = y_re;
        double r42412 = r42410 * r42411;
        double r42413 = x_im;
        double r42414 = y_im;
        double r42415 = r42413 * r42414;
        double r42416 = r42412 + r42415;
        double r42417 = r42411 * r42411;
        double r42418 = r42414 * r42414;
        double r42419 = r42417 + r42418;
        double r42420 = r42416 / r42419;
        return r42420;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r42421 = x_im;
        double r42422 = y_im;
        double r42423 = r42421 * r42422;
        double r42424 = x_re;
        double r42425 = y_re;
        double r42426 = r42424 * r42425;
        double r42427 = r42423 + r42426;
        double r42428 = r42425 * r42425;
        double r42429 = r42422 * r42422;
        double r42430 = r42428 + r42429;
        double r42431 = r42427 / r42430;
        double r42432 = -inf.0;
        bool r42433 = r42431 <= r42432;
        double r42434 = sqrt(r42430);
        double r42435 = r42421 / r42434;
        double r42436 = 1.1260778548377935e+280;
        bool r42437 = r42431 <= r42436;
        double r42438 = 1.0;
        double r42439 = r42434 / r42427;
        double r42440 = r42438 / r42439;
        double r42441 = r42440 / r42434;
        double r42442 = r42424 / r42434;
        double r42443 = r42437 ? r42441 : r42442;
        double r42444 = r42433 ? r42435 : r42443;
        return r42444;
}

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. Simplified64.0

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

      \[\leadsto \frac{\color{blue}{x.im}}{\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))) < 1.1260778548377935e+280

    1. Initial program 11.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-sqrt11.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*11.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}}}\]
    5. Simplified11.7

      \[\leadsto \frac{\color{blue}{\frac{x.im \cdot y.im + y.re \cdot x.re}{\sqrt{y.re \cdot y.re + {y.im}^{2}}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    6. Using strategy rm
    7. Applied clear-num11.8

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

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

    if 1.1260778548377935e+280 < (/ (+ (* 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. Simplified62.8

      \[\leadsto \frac{\color{blue}{\frac{x.im \cdot y.im + y.re \cdot x.re}{\sqrt{y.re \cdot y.re + {y.im}^{2}}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    6. Taylor expanded around 0 60.1

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

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

Reproduce

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