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 r438169 = 0.5;
double r438170 = 2.0;
double r438171 = re;
double r438172 = r438171 * r438171;
double r438173 = im;
double r438174 = r438173 * r438173;
double r438175 = r438172 + r438174;
double r438176 = sqrt(r438175);
double r438177 = r438176 - r438171;
double r438178 = r438170 * r438177;
double r438179 = sqrt(r438178);
double r438180 = r438169 * r438179;
return r438180;
}
double f(double re, double im) {
double r438181 = re;
double r438182 = im;
double r438183 = hypot(r438181, r438182);
double r438184 = r438183 - r438181;
double r438185 = 2.0;
double r438186 = r438184 * r438185;
double r438187 = sqrt(r438186);
double r438188 = 0.5;
double r438189 = r438187 * r438188;
return r438189;
}



Bits error versus re



Bits error versus im
Results
Initial program 37.4
Simplified12.9
Final simplification12.9
herbie shell --seed 2019124 +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)))))