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.5double 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;
}



Bits error versus re



Bits error versus im
Results
Initial program 38.3
Simplified13.0
Final simplification13.0
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)))))