Average Error: 25.6 → 25.5
Time: 1.6m
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{y.re \cdot x.im - 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{y.re \cdot x.im - 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 r6818311 = x_im;
        double r6818312 = y_re;
        double r6818313 = r6818311 * r6818312;
        double r6818314 = x_re;
        double r6818315 = y_im;
        double r6818316 = r6818314 * r6818315;
        double r6818317 = r6818313 - r6818316;
        double r6818318 = r6818312 * r6818312;
        double r6818319 = r6818315 * r6818315;
        double r6818320 = r6818318 + r6818319;
        double r6818321 = r6818317 / r6818320;
        return r6818321;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r6818322 = y_re;
        double r6818323 = x_im;
        double r6818324 = r6818322 * r6818323;
        double r6818325 = x_re;
        double r6818326 = y_im;
        double r6818327 = r6818325 * r6818326;
        double r6818328 = r6818324 - r6818327;
        double r6818329 = r6818322 * r6818322;
        double r6818330 = r6818326 * r6818326;
        double r6818331 = r6818329 + r6818330;
        double r6818332 = sqrt(r6818331);
        double r6818333 = r6818328 / r6818332;
        double r6818334 = r6818333 / r6818332;
        return r6818334;
}

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 \color{blue}{1 \cdot \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}}}\]
  7. Final simplification25.5

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