Average Error: 26.2 → 24.7
Time: 13.2s
Precision: 64
\[\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{y.im}{\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{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \frac{y.im}{\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 r53930 = x_im;
        double r53931 = y_re;
        double r53932 = r53930 * r53931;
        double r53933 = x_re;
        double r53934 = y_im;
        double r53935 = r53933 * r53934;
        double r53936 = r53932 - r53935;
        double r53937 = r53931 * r53931;
        double r53938 = r53934 * r53934;
        double r53939 = r53937 + r53938;
        double r53940 = r53936 / r53939;
        return r53940;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r53941 = x_im;
        double r53942 = y_re;
        double r53943 = r53941 * r53942;
        double r53944 = r53942 * r53942;
        double r53945 = y_im;
        double r53946 = r53945 * r53945;
        double r53947 = r53944 + r53946;
        double r53948 = r53943 / r53947;
        double r53949 = x_re;
        double r53950 = sqrt(r53947);
        double r53951 = r53949 / r53950;
        double r53952 = r53945 / r53950;
        double r53953 = r53951 * r53952;
        double r53954 = r53948 - r53953;
        return r53954;
}

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 26.2

    \[\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 div-sub26.2

    \[\leadsto \color{blue}{\frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}}\]
  4. Using strategy rm
  5. Applied add-sqr-sqrt26.2

    \[\leadsto \frac{x.im \cdot y.re}{y.re \cdot y.re + y.im \cdot y.im} - \frac{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}}}\]
  6. Applied times-frac24.7

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

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

Reproduce

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