0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\sqrt{\left(\sqrt{re^2 + im^2}^* - re\right) \cdot 2.0} \cdot 0.5double f(double re, double im) {
double r598574 = 0.5;
double r598575 = 2.0;
double r598576 = re;
double r598577 = r598576 * r598576;
double r598578 = im;
double r598579 = r598578 * r598578;
double r598580 = r598577 + r598579;
double r598581 = sqrt(r598580);
double r598582 = r598581 - r598576;
double r598583 = r598575 * r598582;
double r598584 = sqrt(r598583);
double r598585 = r598574 * r598584;
return r598585;
}
double f(double re, double im) {
double r598586 = re;
double r598587 = im;
double r598588 = hypot(r598586, r598587);
double r598589 = r598588 - r598586;
double r598590 = 2.0;
double r598591 = r598589 * r598590;
double r598592 = sqrt(r598591);
double r598593 = 0.5;
double r598594 = r598592 * r598593;
return r598594;
}



Bits error versus re



Bits error versus im
Results
Initial program 37.7
Simplified13.3
Final simplification13.3
herbie shell --seed 2019104 +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)))))