Average Error: 26.5 → 22.8
Time: 3.1s
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 r55144 = x_im;
        double r55145 = y_re;
        double r55146 = r55144 * r55145;
        double r55147 = x_re;
        double r55148 = y_im;
        double r55149 = r55147 * r55148;
        double r55150 = r55146 - r55149;
        double r55151 = r55145 * r55145;
        double r55152 = r55148 * r55148;
        double r55153 = r55151 + r55152;
        double r55154 = r55150 / r55153;
        return r55154;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r55155 = x_im;
        double r55156 = y_re;
        double r55157 = r55156 * r55156;
        double r55158 = y_im;
        double r55159 = r55158 * r55158;
        double r55160 = r55157 + r55159;
        double r55161 = sqrt(r55160);
        double r55162 = r55161 / r55156;
        double r55163 = r55155 / r55162;
        double r55164 = x_re;
        double r55165 = r55161 / r55158;
        double r55166 = r55164 / r55165;
        double r55167 = r55163 - r55166;
        double r55168 = r55167 / r55161;
        return r55168;
}

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

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

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

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

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

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

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

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

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

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