0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -1.6803581184866765 \cdot 10^{+133}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\
\mathbf{elif}\;im \le -2.455921094632069 \cdot 10^{-131}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{elif}\;im \le -1.151501406023375 \cdot 10^{-301}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\
\mathbf{elif}\;im \le 6.443348859698863 \cdot 10^{-287}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\
\mathbf{elif}\;im \le 3.7508469166234406 \cdot 10^{-167}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\
\mathbf{elif}\;im \le 3.111595179540434 \cdot 10^{+113}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\
\end{array}double f(double re, double im) {
double r1316487 = 0.5;
double r1316488 = 2.0;
double r1316489 = re;
double r1316490 = r1316489 * r1316489;
double r1316491 = im;
double r1316492 = r1316491 * r1316491;
double r1316493 = r1316490 + r1316492;
double r1316494 = sqrt(r1316493);
double r1316495 = r1316494 - r1316489;
double r1316496 = r1316488 * r1316495;
double r1316497 = sqrt(r1316496);
double r1316498 = r1316487 * r1316497;
return r1316498;
}
double f(double re, double im) {
double r1316499 = im;
double r1316500 = -1.6803581184866765e+133;
bool r1316501 = r1316499 <= r1316500;
double r1316502 = 0.5;
double r1316503 = -2.0;
double r1316504 = re;
double r1316505 = r1316503 * r1316504;
double r1316506 = 2.0;
double r1316507 = r1316505 * r1316506;
double r1316508 = sqrt(r1316507);
double r1316509 = r1316502 * r1316508;
double r1316510 = -2.455921094632069e-131;
bool r1316511 = r1316499 <= r1316510;
double r1316512 = r1316504 * r1316504;
double r1316513 = r1316499 * r1316499;
double r1316514 = r1316512 + r1316513;
double r1316515 = sqrt(r1316514);
double r1316516 = r1316515 - r1316504;
double r1316517 = r1316506 * r1316516;
double r1316518 = sqrt(r1316517);
double r1316519 = r1316502 * r1316518;
double r1316520 = -1.151501406023375e-301;
bool r1316521 = r1316499 <= r1316520;
double r1316522 = 6.443348859698863e-287;
bool r1316523 = r1316499 <= r1316522;
double r1316524 = r1316513 * r1316506;
double r1316525 = sqrt(r1316524);
double r1316526 = r1316504 + r1316515;
double r1316527 = sqrt(r1316526);
double r1316528 = r1316525 / r1316527;
double r1316529 = r1316502 * r1316528;
double r1316530 = 3.7508469166234406e-167;
bool r1316531 = r1316499 <= r1316530;
double r1316532 = 3.111595179540434e+113;
bool r1316533 = r1316499 <= r1316532;
double r1316534 = r1316499 - r1316504;
double r1316535 = r1316534 * r1316506;
double r1316536 = sqrt(r1316535);
double r1316537 = r1316502 * r1316536;
double r1316538 = r1316533 ? r1316519 : r1316537;
double r1316539 = r1316531 ? r1316509 : r1316538;
double r1316540 = r1316523 ? r1316529 : r1316539;
double r1316541 = r1316521 ? r1316509 : r1316540;
double r1316542 = r1316511 ? r1316519 : r1316541;
double r1316543 = r1316501 ? r1316509 : r1316542;
return r1316543;
}



Bits error versus re



Bits error versus im
Results
if im < -1.6803581184866765e+133 or -2.455921094632069e-131 < im < -1.151501406023375e-301 or 6.443348859698863e-287 < im < 3.7508469166234406e-167Initial program 47.5
Taylor expanded around -inf 43.6
if -1.6803581184866765e+133 < im < -2.455921094632069e-131 or 3.7508469166234406e-167 < im < 3.111595179540434e+113Initial program 23.8
if -1.151501406023375e-301 < im < 6.443348859698863e-287Initial program 39.3
rmApplied flip--53.8
Applied associate-*r/53.8
Applied sqrt-div54.0
Simplified45.7
if 3.111595179540434e+113 < im Initial program 51.6
Taylor expanded around 0 9.7
Final simplification29.5
herbie shell --seed 2019121
(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)))))