double f(double re, double im) {
double r611938 = 0.5;
double r611939 = 2.0;
double r611940 = re;
double r611941 = r611940 * r611940;
double r611942 = im;
double r611943 = r611942 * r611942;
double r611944 = r611941 + r611943;
double r611945 = sqrt(r611944);
double r611946 = r611945 - r611940;
double r611947 = r611939 * r611946;
double r611948 = sqrt(r611947);
double r611949 = r611938 * r611948;
return r611949;
}
double f(double re, double im) {
double r611950 = 0.5;
double r611951 = 2.0;
double r611952 = sqrt(r611951);
double r611953 = sqrt(r611952);
double r611954 = re;
double r611955 = im;
double r611956 = hypot(r611954, r611955);
double r611957 = r611956 - r611954;
double r611958 = r611957 * r611952;
double r611959 = sqrt(r611958);
double r611960 = r611953 * r611959;
double r611961 = r611950 * r611960;
return r611961;
}
0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}0.5 \cdot \left(\sqrt{\sqrt{2.0}} \cdot \sqrt{\left(\sqrt{re^2 + im^2}^* - re\right) \cdot \sqrt{2.0}}\right)


Bits error versus re



Bits error versus im
Initial program 37.3
Simplified13.6
rmApplied sqrt-prod13.8
rmApplied add-sqr-sqrt13.8
Applied sqrt-prod13.9
Applied associate-*r*13.9
rmApplied add-sqr-sqrt14.8
rmApplied sqrt-unprod14.8
Simplified13.8
Final simplification13.8
herbie shell --seed 2019101 +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)))))