Average Error: 1.1 → 1.1
Time: 4.3s
Precision: 64
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{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 r625310 = x_re;
        double r625311 = y_re;
        double r625312 = r625310 * r625311;
        double r625313 = x_im;
        double r625314 = y_im;
        double r625315 = r625313 * r625314;
        double r625316 = r625312 + r625315;
        double r625317 = r625311 * r625311;
        double r625318 = r625314 * r625314;
        double r625319 = r625317 + r625318;
        double r625320 = r625316 / r625319;
        return r625320;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r625321 = x_re;
        double r625322 = y_re;
        double r625323 = r625321 * r625322;
        double r625324 = x_im;
        double r625325 = y_im;
        double r625326 = r625324 * r625325;
        double r625327 = r625323 + r625326;
        double r625328 = r625322 * r625322;
        double r625329 = r625325 * r625325;
        double r625330 = r625328 + r625329;
        double r625331 = r625327 / r625330;
        return r625331;
}

\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}
\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Derivation

  1. Initial program 1.1

    \[\frac{\left(\frac{\left(x.re \cdot y.re\right)}{\left(x.im \cdot y.im\right)}\right)}{\left(\frac{\left(y.re \cdot y.re\right)}{\left(y.im \cdot y.im\right)}\right)}\]
  2. Final simplification1.1

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

Reproduce

herbie shell --seed 2019102 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
  :name "_divideComplex, real part"
  (/.p16 (+.p16 (*.p16 x.re y.re) (*.p16 x.im y.im)) (+.p16 (*.p16 y.re y.re) (*.p16 y.im y.im))))