Average Error: 0.6 → 0.6
Time: 2.6s
Precision: 64
\[\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}\]
\[\sqrt{re \cdot re + im \cdot im}\]
\sqrt{\left(\frac{\left(re \cdot re\right)}{\left(im \cdot im\right)}\right)}
\sqrt{re \cdot re + im \cdot im}
double f(double re, double im) {
        double r611951 = re;
        double r611952 = r611951 * r611951;
        double r611953 = im;
        double r611954 = r611953 * r611953;
        double r611955 = r611952 + r611954;
        double r611956 = sqrt(r611955);
        return r611956;
}

double f(double re, double im) {
        double r611957 = re;
        double r611958 = r611957 * r611957;
        double r611959 = im;
        double r611960 = r611959 * r611959;
        double r611961 = r611958 + r611960;
        double r611962 = sqrt(r611961);
        return r611962;
}

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