Average Error: 0.6 → 0.6
Time: 3.8s
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\sqrt{re \cdot re + im \cdot im}\]
double f(double re, double im) {
        double r600251 = re;
        double r600252 = r600251 * r600251;
        double r600253 = im;
        double r600254 = r600253 * r600253;
        double r600255 = r600252 + r600254;
        double r600256 = sqrt(r600255);
        return r600256;
}

double f(double re, double im) {
        double r600257 = re;
        double r600258 = r600257 * r600257;
        double r600259 = im;
        double r600260 = r600259 * r600259;
        double r600261 = r600258 + r600260;
        double r600262 = sqrt(r600261);
        return r600262;
}

\sqrt{re \cdot re + im \cdot im}
\sqrt{re \cdot re + im \cdot im}

Error

Bits error versus re

Bits error versus im

Derivation

  1. Initial program 0.6

    \[\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\]
  2. Final simplification0.6

    \[\leadsto \sqrt{re \cdot re + im \cdot im}\]

Reproduce

herbie shell --seed 2019102 +o rules:numerics
(FPCore (re im)
  :name "math.abs on complex"
  (sqrt.p16 (+.p16 (*.p16 re re) (*.p16 im im))))