Average Error: 37.6 → 13.4
Time: 19.2s
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 r705880 = 0.5;
        double r705881 = 2.0;
        double r705882 = re;
        double r705883 = r705882 * r705882;
        double r705884 = im;
        double r705885 = r705884 * r705884;
        double r705886 = r705883 + r705885;
        double r705887 = sqrt(r705886);
        double r705888 = r705887 - r705882;
        double r705889 = r705881 * r705888;
        double r705890 = sqrt(r705889);
        double r705891 = r705880 * r705890;
        return r705891;
}

double f(double re, double im) {
        double r705892 = re;
        double r705893 = im;
        double r705894 = hypot(r705892, r705893);
        double r705895 = r705894 - r705892;
        double r705896 = 2.0;
        double r705897 = r705895 * r705896;
        double r705898 = sqrt(r705897);
        double r705899 = 0.5;
        double r705900 = r705898 * r705899;
        return r705900;
}

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 37.6

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

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

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

Reproduce

herbie shell --seed 2019162 +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)))))