Average Error: 1.1 → 1.1
Time: 4.3s
Precision: 64
\[\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)}\]
\[\frac{x.re \cdot y.re + x.im \cdot y.im}{y.re \cdot y.re + y.im \cdot y.im}\]
\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)}
\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 r865003 = x_re;
        double r865004 = y_re;
        double r865005 = r865003 * r865004;
        double r865006 = x_im;
        double r865007 = y_im;
        double r865008 = r865006 * r865007;
        double r865009 = r865005 + r865008;
        double r865010 = r865004 * r865004;
        double r865011 = r865007 * r865007;
        double r865012 = r865010 + r865011;
        double r865013 = r865009 / r865012;
        return r865013;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r865014 = x_re;
        double r865015 = y_re;
        double r865016 = r865014 * r865015;
        double r865017 = x_im;
        double r865018 = y_im;
        double r865019 = r865017 * r865018;
        double r865020 = r865016 + r865019;
        double r865021 = r865015 * r865015;
        double r865022 = r865018 * r865018;
        double r865023 = r865021 + r865022;
        double r865024 = r865020 / r865023;
        return r865024;
}

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 2019120 
(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))))