0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\sqrt{\left(\mathsf{hypot}\left(re, im\right) - re\right) \cdot 2} \cdot 0.5double f(double re, double im) {
double r684136 = 0.5;
double r684137 = 2.0;
double r684138 = re;
double r684139 = r684138 * r684138;
double r684140 = im;
double r684141 = r684140 * r684140;
double r684142 = r684139 + r684141;
double r684143 = sqrt(r684142);
double r684144 = r684143 - r684138;
double r684145 = r684137 * r684144;
double r684146 = sqrt(r684145);
double r684147 = r684136 * r684146;
return r684147;
}
double f(double re, double im) {
double r684148 = re;
double r684149 = im;
double r684150 = hypot(r684148, r684149);
double r684151 = r684150 - r684148;
double r684152 = 2.0;
double r684153 = r684151 * r684152;
double r684154 = sqrt(r684153);
double r684155 = 0.5;
double r684156 = r684154 * r684155;
return r684156;
}



Bits error versus re



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