Average Error: 38.3 → 13.0
Time: 36.7s
Precision: 64
\[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
\[\sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2.0} \cdot 0.5\]
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2.0} \cdot 0.5
double f(double re, double im) {
        double r697950 = 0.5;
        double r697951 = 2.0;
        double r697952 = re;
        double r697953 = r697952 * r697952;
        double r697954 = im;
        double r697955 = r697954 * r697954;
        double r697956 = r697953 + r697955;
        double r697957 = sqrt(r697956);
        double r697958 = r697957 - r697952;
        double r697959 = r697951 * r697958;
        double r697960 = sqrt(r697959);
        double r697961 = r697950 * r697960;
        return r697961;
}

double f(double re, double im) {
        double r697962 = re;
        double r697963 = im;
        double r697964 = hypot(r697962, r697963);
        double r697965 = r697964 - r697962;
        double r697966 = 2.0;
        double r697967 = r697965 * r697966;
        double r697968 = sqrt(r697967);
        double r697969 = 0.5;
        double r697970 = r697968 * r697969;
        return r697970;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 38.3

    \[0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\]
  2. Simplified13.0

    \[\leadsto \color{blue}{0.5 \cdot \sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2.0}}\]
  3. Final simplification13.0

    \[\leadsto \sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2.0} \cdot 0.5\]

Reproduce

herbie shell --seed 2019165 +o rules:numerics
(FPCore (re im)
  :name "math.sqrt on complex, imaginary part, im greater than 0 branch"
  (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))