Average Error: 25.8 → 25.7
Time: 13.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.re \cdot y.re + y.im \cdot y.im}}{y.re \cdot x.im - y.im \cdot x.re}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
\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.re \cdot y.re + y.im \cdot y.im}}{y.re \cdot x.im - y.im \cdot x.re}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r1125929 = x_im;
        double r1125930 = y_re;
        double r1125931 = r1125929 * r1125930;
        double r1125932 = x_re;
        double r1125933 = y_im;
        double r1125934 = r1125932 * r1125933;
        double r1125935 = r1125931 - r1125934;
        double r1125936 = r1125930 * r1125930;
        double r1125937 = r1125933 * r1125933;
        double r1125938 = r1125936 + r1125937;
        double r1125939 = r1125935 / r1125938;
        return r1125939;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1125940 = 1.0;
        double r1125941 = y_re;
        double r1125942 = r1125941 * r1125941;
        double r1125943 = y_im;
        double r1125944 = r1125943 * r1125943;
        double r1125945 = r1125942 + r1125944;
        double r1125946 = sqrt(r1125945);
        double r1125947 = x_im;
        double r1125948 = r1125941 * r1125947;
        double r1125949 = x_re;
        double r1125950 = r1125943 * r1125949;
        double r1125951 = r1125948 - r1125950;
        double r1125952 = r1125946 / r1125951;
        double r1125953 = r1125940 / r1125952;
        double r1125954 = r1125953 / r1125946;
        return r1125954;
}

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.8

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

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

    \[\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 *-un-lft-identity25.7

    \[\leadsto \frac{\frac{\color{blue}{1 \cdot \left(x.im \cdot y.re - x.re \cdot y.im\right)}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  7. Applied associate-/l*25.7

    \[\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}}\]
  8. Final simplification25.7

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

Reproduce

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