Average Error: 26.1 → 22.5
Time: 4.3s
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}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.re}} - \frac{x.re}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{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}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.re}} - \frac{x.re}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{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 r73092 = x_im;
        double r73093 = y_re;
        double r73094 = r73092 * r73093;
        double r73095 = x_re;
        double r73096 = y_im;
        double r73097 = r73095 * r73096;
        double r73098 = r73094 - r73097;
        double r73099 = r73093 * r73093;
        double r73100 = r73096 * r73096;
        double r73101 = r73099 + r73100;
        double r73102 = r73098 / r73101;
        return r73102;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r73103 = x_im;
        double r73104 = y_re;
        double r73105 = r73104 * r73104;
        double r73106 = y_im;
        double r73107 = r73106 * r73106;
        double r73108 = r73105 + r73107;
        double r73109 = sqrt(r73108);
        double r73110 = r73109 / r73104;
        double r73111 = r73103 / r73110;
        double r73112 = x_re;
        double r73113 = r73109 / r73106;
        double r73114 = r73112 / r73113;
        double r73115 = r73111 - r73114;
        double r73116 = r73115 / r73109;
        return r73116;
}

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

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

    \[\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*26.1

    \[\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 add-sqr-sqrt26.1

    \[\leadsto \frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\sqrt{\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}}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  7. Applied sqrt-prod26.2

    \[\leadsto \frac{\frac{x.im \cdot y.re - x.re \cdot y.im}{\color{blue}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  8. Using strategy rm
  9. Applied div-sub26.2

    \[\leadsto \frac{\color{blue}{\frac{x.im \cdot y.re}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}} - \frac{x.re \cdot y.im}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  10. Simplified24.4

    \[\leadsto \frac{\color{blue}{\frac{x.im}{\frac{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}{y.re}}} - \frac{x.re \cdot y.im}{\sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}} \cdot \sqrt{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}}}{\sqrt{y.re \cdot y.re + y.im \cdot y.im}}\]
  11. Simplified22.5

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

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

Reproduce

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