0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.4431880858205433 \cdot 10^{+94}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\
\mathbf{elif}\;re \le 5.733285307974192 \cdot 10^{-284}:\\
\;\;\;\;\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{else}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}}\\
\end{array}double f(double re, double im) {
double r506492 = 0.5;
double r506493 = 2.0;
double r506494 = re;
double r506495 = r506494 * r506494;
double r506496 = im;
double r506497 = r506496 * r506496;
double r506498 = r506495 + r506497;
double r506499 = sqrt(r506498);
double r506500 = r506499 - r506494;
double r506501 = r506493 * r506500;
double r506502 = sqrt(r506501);
double r506503 = r506492 * r506502;
return r506503;
}
double f(double re, double im) {
double r506504 = re;
double r506505 = -1.4431880858205433e+94;
bool r506506 = r506504 <= r506505;
double r506507 = -2.0;
double r506508 = r506507 * r506504;
double r506509 = 2.0;
double r506510 = r506508 * r506509;
double r506511 = sqrt(r506510);
double r506512 = 0.5;
double r506513 = r506511 * r506512;
double r506514 = 5.733285307974192e-284;
bool r506515 = r506504 <= r506514;
double r506516 = im;
double r506517 = r506516 * r506516;
double r506518 = r506504 * r506504;
double r506519 = r506517 + r506518;
double r506520 = sqrt(r506519);
double r506521 = sqrt(r506520);
double r506522 = r506521 * r506521;
double r506523 = r506522 - r506504;
double r506524 = r506509 * r506523;
double r506525 = sqrt(r506524);
double r506526 = r506525 * r506512;
double r506527 = r506517 * r506509;
double r506528 = sqrt(r506527);
double r506529 = r506520 + r506504;
double r506530 = sqrt(r506529);
double r506531 = r506528 / r506530;
double r506532 = r506512 * r506531;
double r506533 = r506515 ? r506526 : r506532;
double r506534 = r506506 ? r506513 : r506533;
return r506534;
}



Bits error versus re



Bits error versus im
Results
if re < -1.4431880858205433e+94Initial program 47.9
Taylor expanded around -inf 9.5
if -1.4431880858205433e+94 < re < 5.733285307974192e-284Initial program 21.3
rmApplied add-sqr-sqrt21.4
if 5.733285307974192e-284 < re Initial program 44.9
rmApplied flip--44.9
Applied associate-*r/44.9
Applied sqrt-div45.0
Simplified33.6
Final simplification25.1
herbie shell --seed 2019138
(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)))))