Average Error: 0.6 → 0.6
Time: 2.7s
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\sqrt{re \cdot re + im \cdot im}\]
double f(double re, double im) {
        double r789130 = re;
        double r789131 = r789130 * r789130;
        double r789132 = im;
        double r789133 = r789132 * r789132;
        double r789134 = r789131 + r789133;
        double r789135 = sqrt(r789134);
        return r789135;
}

double f(double re, double im) {
        double r789136 = re;
        double r789137 = r789136 * r789136;
        double r789138 = im;
        double r789139 = r789138 * r789138;
        double r789140 = r789137 + r789139;
        double r789141 = sqrt(r789140);
        return r789141;
}

\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 2019101 +o rules:numerics
(FPCore (re im)
  :name "math.abs on complex"
  (sqrt.p16 (+.p16 (*.p16 re re) (*.p16 im im))))