Average Error: 25.9 → 25.9
Time: 50.8s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{\frac{1}{\frac{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}{x.im \cdot y.re - x.re \cdot y.im}}}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}\]
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{\frac{1}{\frac{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}{x.im \cdot y.re - x.re \cdot y.im}}}{\sqrt{y.im \cdot y.im + y.re \cdot y.re}}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r3059013 = x_im;
        double r3059014 = y_re;
        double r3059015 = r3059013 * r3059014;
        double r3059016 = x_re;
        double r3059017 = y_im;
        double r3059018 = r3059016 * r3059017;
        double r3059019 = r3059015 - r3059018;
        double r3059020 = r3059014 * r3059014;
        double r3059021 = r3059017 * r3059017;
        double r3059022 = r3059020 + r3059021;
        double r3059023 = r3059019 / r3059022;
        return r3059023;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r3059024 = 1.0;
        double r3059025 = y_im;
        double r3059026 = r3059025 * r3059025;
        double r3059027 = y_re;
        double r3059028 = r3059027 * r3059027;
        double r3059029 = r3059026 + r3059028;
        double r3059030 = sqrt(r3059029);
        double r3059031 = x_im;
        double r3059032 = r3059031 * r3059027;
        double r3059033 = x_re;
        double r3059034 = r3059033 * r3059025;
        double r3059035 = r3059032 - r3059034;
        double r3059036 = r3059030 / r3059035;
        double r3059037 = r3059024 / r3059036;
        double r3059038 = r3059037 / r3059030;
        return r3059038;
}

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. Initial program 25.9

    \[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt25.9

    \[\leadsto \frac{x.im \cdot y.re - x.re \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*25.9

    \[\leadsto \color{blue}{\frac{\frac{x.im \cdot y.re - x.re \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. Using strategy rm
  6. Applied clear-num25.9

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

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

Reproduce

herbie shell --seed 2019200 
(FPCore (x.re x.im y.re y.im)
  :name "_divideComplex, imaginary part"
  (/ (- (* x.im y.re) (* x.re y.im)) (+ (* y.re y.re) (* y.im y.im))))