Average Error: 29.6 → 0.0
Time: 2.8s
Precision: 64
\[\sqrt{re \cdot re + im \cdot im}\]
\[\sqrt{re^2 + im^2}^*\]
double f(double re, double im) {
        double r1791408 = re;
        double r1791409 = r1791408 * r1791408;
        double r1791410 = im;
        double r1791411 = r1791410 * r1791410;
        double r1791412 = r1791409 + r1791411;
        double r1791413 = sqrt(r1791412);
        return r1791413;
}

double f(double re, double im) {
        double r1791414 = re;
        double r1791415 = im;
        double r1791416 = hypot(r1791414, r1791415);
        return r1791416;
}

\sqrt{re \cdot re + im \cdot im}
\sqrt{re^2 + im^2}^*

Error

Bits error versus re

Bits error versus im

Derivation

  1. Initial program 29.6

    \[\sqrt{re \cdot re + im \cdot im}\]
  2. Simplified0.0

    \[\leadsto \color{blue}{\sqrt{re^2 + im^2}^*}\]
  3. Final simplification0.0

    \[\leadsto \sqrt{re^2 + im^2}^*\]

Reproduce

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