Average Error: 26.1 → 25.4
Time: 13.8s
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} \le 5.290220499438646573779156255085041511729 \cdot 10^{298}:\\ \;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{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.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im} \le 5.290220499438646573779156255085041511729 \cdot 10^{298}:\\
\;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{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 r39139 = x_re;
        double r39140 = y_re;
        double r39141 = r39139 * r39140;
        double r39142 = x_im;
        double r39143 = y_im;
        double r39144 = r39142 * r39143;
        double r39145 = r39141 + r39144;
        double r39146 = r39140 * r39140;
        double r39147 = r39143 * r39143;
        double r39148 = r39146 + r39147;
        double r39149 = r39145 / r39148;
        return r39149;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r39150 = x_re;
        double r39151 = y_re;
        double r39152 = r39150 * r39151;
        double r39153 = x_im;
        double r39154 = y_im;
        double r39155 = r39153 * r39154;
        double r39156 = r39152 + r39155;
        double r39157 = r39151 * r39151;
        double r39158 = r39154 * r39154;
        double r39159 = r39157 + r39158;
        double r39160 = r39156 / r39159;
        double r39161 = 5.290220499438647e+298;
        bool r39162 = r39160 <= r39161;
        double r39163 = -1.0;
        double r39164 = sqrt(r39159);
        double r39165 = r39163 / r39164;
        double r39166 = r39165 * r39150;
        double r39167 = r39162 ? r39160 : r39166;
        return r39167;
}

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))) < 5.290220499438647e+298

    1. Initial program 14.4

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

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

    if 5.290220499438647e+298 < (/ (+ (* x.re y.re) (* x.im y.im)) (+ (* y.re y.re) (* y.im y.im)))

    1. Initial program 63.4

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

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

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

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

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

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

    \[\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} \le 5.290220499438646573779156255085041511729 \cdot 10^{298}:\\ \;\;\;\;\frac{x.re \cdot y.re + x.im \cdot y.im}{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 2019304 
(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))))