Average Error: 25.8 → 26.2
Time: 16.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}\;y.im \le -1.300179201415138562389146100214075083549 \cdot 10^{53}:\\ \;\;\;\;-\frac{x.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{y.im \cdot y.im + y.re \cdot y.re}{x.re \cdot y.re + x.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}\;y.im \le -1.300179201415138562389146100214075083549 \cdot 10^{53}:\\
\;\;\;\;-\frac{x.im}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\\

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

\end{array}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r43963 = x_re;
        double r43964 = y_re;
        double r43965 = r43963 * r43964;
        double r43966 = x_im;
        double r43967 = y_im;
        double r43968 = r43966 * r43967;
        double r43969 = r43965 + r43968;
        double r43970 = r43964 * r43964;
        double r43971 = r43967 * r43967;
        double r43972 = r43970 + r43971;
        double r43973 = r43969 / r43972;
        return r43973;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r43974 = y_im;
        double r43975 = -1.3001792014151386e+53;
        bool r43976 = r43974 <= r43975;
        double r43977 = x_im;
        double r43978 = r43974 * r43974;
        double r43979 = y_re;
        double r43980 = r43979 * r43979;
        double r43981 = r43978 + r43980;
        double r43982 = sqrt(r43981);
        double r43983 = r43977 / r43982;
        double r43984 = -r43983;
        double r43985 = 1.0;
        double r43986 = x_re;
        double r43987 = r43986 * r43979;
        double r43988 = r43977 * r43974;
        double r43989 = r43987 + r43988;
        double r43990 = r43981 / r43989;
        double r43991 = r43985 / r43990;
        double r43992 = r43976 ? r43984 : r43991;
        return r43992;
}

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 y.im < -1.3001792014151386e+53

    1. Initial program 35.6

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

      \[\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*35.6

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

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

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

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

    if -1.3001792014151386e+53 < y.im

    1. Initial program 23.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-sqrt23.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*23.1

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

      \[\leadsto \frac{\color{blue}{\frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    6. Using strategy rm
    7. Applied *-un-lft-identity23.1

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

      \[\leadsto \frac{\frac{x.im \cdot y.im + x.re \cdot y.re}{\color{blue}{\sqrt{1} \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    9. Applied *-un-lft-identity23.1

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

      \[\leadsto \frac{\color{blue}{\frac{1}{\sqrt{1}} \cdot \frac{x.im \cdot y.im + x.re \cdot y.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
    11. Applied associate-/l*23.3

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

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

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

Reproduce

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