Average Error: 25.8 → 25.8
Time: 13.5s
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 r1819186 = x_im;
        double r1819187 = y_re;
        double r1819188 = r1819186 * r1819187;
        double r1819189 = x_re;
        double r1819190 = y_im;
        double r1819191 = r1819189 * r1819190;
        double r1819192 = r1819188 - r1819191;
        double r1819193 = r1819187 * r1819187;
        double r1819194 = r1819190 * r1819190;
        double r1819195 = r1819193 + r1819194;
        double r1819196 = r1819192 / r1819195;
        return r1819196;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1819197 = 1.0;
        double r1819198 = y_re;
        double r1819199 = r1819198 * r1819198;
        double r1819200 = y_im;
        double r1819201 = r1819200 * r1819200;
        double r1819202 = r1819199 + r1819201;
        double r1819203 = sqrt(r1819202);
        double r1819204 = x_im;
        double r1819205 = r1819198 * r1819204;
        double r1819206 = x_re;
        double r1819207 = r1819200 * r1819206;
        double r1819208 = r1819205 - r1819207;
        double r1819209 = r1819203 / r1819208;
        double r1819210 = r1819197 / r1819209;
        double r1819211 = r1819210 / r1819203;
        return r1819211;
}

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

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

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

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

    \[\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 2019137 
(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))))