Average Error: 25.6 → 25.5
Time: 3.4m
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{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}}\]
\frac{x.im \cdot y.re - x.re \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\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}}
double f(double x_re, double x_im, double y_re, double y_im) {
        double r11984852 = x_im;
        double r11984853 = y_re;
        double r11984854 = r11984852 * r11984853;
        double r11984855 = x_re;
        double r11984856 = y_im;
        double r11984857 = r11984855 * r11984856;
        double r11984858 = r11984854 - r11984857;
        double r11984859 = r11984853 * r11984853;
        double r11984860 = r11984856 * r11984856;
        double r11984861 = r11984859 + r11984860;
        double r11984862 = r11984858 / r11984861;
        return r11984862;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r11984863 = x_im;
        double r11984864 = y_re;
        double r11984865 = r11984863 * r11984864;
        double r11984866 = x_re;
        double r11984867 = y_im;
        double r11984868 = r11984866 * r11984867;
        double r11984869 = r11984865 - r11984868;
        double r11984870 = r11984864 * r11984864;
        double r11984871 = r11984867 * r11984867;
        double r11984872 = r11984870 + r11984871;
        double r11984873 = sqrt(r11984872);
        double r11984874 = r11984869 / r11984873;
        double r11984875 = r11984874 / r11984873;
        return r11984875;
}

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

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

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

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

    \[\leadsto \frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}{\color{blue}{1 \cdot \sqrt{y.re \cdot y.re + y.im \cdot y.im}}}\]
  7. Applied associate-/r*25.5

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

    \[\leadsto \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}}\]

Reproduce

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