0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -2.5847343597756595 \cdot 10^{+152}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\
\mathbf{elif}\;re \le 3.370030719226152 \cdot 10^{-307}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right)} \cdot 0.5\\
\mathbf{elif}\;re \le 3.221654116729901 \cdot 10^{+106}:\\
\;\;\;\;\left(\left|im\right| \cdot \frac{\sqrt{2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}}\right) \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{re + re}} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r983402 = 0.5;
double r983403 = 2.0;
double r983404 = re;
double r983405 = r983404 * r983404;
double r983406 = im;
double r983407 = r983406 * r983406;
double r983408 = r983405 + r983407;
double r983409 = sqrt(r983408);
double r983410 = r983409 - r983404;
double r983411 = r983403 * r983410;
double r983412 = sqrt(r983411);
double r983413 = r983402 * r983412;
return r983413;
}
double f(double re, double im) {
double r983414 = re;
double r983415 = -2.5847343597756595e+152;
bool r983416 = r983414 <= r983415;
double r983417 = -2.0;
double r983418 = r983417 * r983414;
double r983419 = 2.0;
double r983420 = r983418 * r983419;
double r983421 = sqrt(r983420);
double r983422 = 0.5;
double r983423 = r983421 * r983422;
double r983424 = 3.370030719226152e-307;
bool r983425 = r983414 <= r983424;
double r983426 = im;
double r983427 = r983426 * r983426;
double r983428 = r983414 * r983414;
double r983429 = r983427 + r983428;
double r983430 = sqrt(r983429);
double r983431 = sqrt(r983430);
double r983432 = r983431 * r983431;
double r983433 = r983432 - r983414;
double r983434 = r983419 * r983433;
double r983435 = sqrt(r983434);
double r983436 = r983435 * r983422;
double r983437 = 3.221654116729901e+106;
bool r983438 = r983414 <= r983437;
double r983439 = fabs(r983426);
double r983440 = sqrt(r983419);
double r983441 = r983430 + r983414;
double r983442 = sqrt(r983441);
double r983443 = r983440 / r983442;
double r983444 = r983439 * r983443;
double r983445 = r983444 * r983422;
double r983446 = r983427 * r983419;
double r983447 = sqrt(r983446);
double r983448 = r983414 + r983414;
double r983449 = sqrt(r983448);
double r983450 = r983447 / r983449;
double r983451 = r983450 * r983422;
double r983452 = r983438 ? r983445 : r983451;
double r983453 = r983425 ? r983436 : r983452;
double r983454 = r983416 ? r983423 : r983453;
return r983454;
}



Bits error versus re



Bits error versus im
Results
if re < -2.5847343597756595e+152Initial program 60.7
Taylor expanded around -inf 8.8
if -2.5847343597756595e+152 < re < 3.370030719226152e-307Initial program 20.1
rmApplied add-sqr-sqrt20.1
Applied sqrt-prod20.1
if 3.370030719226152e-307 < re < 3.221654116729901e+106Initial program 36.5
rmApplied flip--36.4
Applied associate-*r/36.5
Applied sqrt-div36.6
Simplified28.5
rmApplied *-un-lft-identity28.5
Applied sqrt-prod28.5
Applied sqrt-prod28.6
Applied times-frac28.6
Simplified20.0
if 3.221654116729901e+106 < re Initial program 60.2
rmApplied flip--60.2
Applied associate-*r/60.2
Applied sqrt-div60.2
Simplified44.1
Taylor expanded around inf 22.8
Final simplification19.1
herbie shell --seed 2019165
(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)))))