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 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;
}



Bits error versus re



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