0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -6.4397722734901768 \cdot 10^{138}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -5.0918363823904017 \cdot 10^{-262}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{elif}\;re \le 2.58239247908308831 \cdot 10^{125}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{\sqrt{2}} \cdot \left(\sqrt{\sqrt{2}} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{re + re}}\right)\\
\end{array}double f(double re, double im) {
double r27582 = 0.5;
double r27583 = 2.0;
double r27584 = re;
double r27585 = r27584 * r27584;
double r27586 = im;
double r27587 = r27586 * r27586;
double r27588 = r27585 + r27587;
double r27589 = sqrt(r27588);
double r27590 = r27589 - r27584;
double r27591 = r27583 * r27590;
double r27592 = sqrt(r27591);
double r27593 = r27582 * r27592;
return r27593;
}
double f(double re, double im) {
double r27594 = re;
double r27595 = -6.439772273490177e+138;
bool r27596 = r27594 <= r27595;
double r27597 = 0.5;
double r27598 = 2.0;
double r27599 = -2.0;
double r27600 = r27599 * r27594;
double r27601 = r27598 * r27600;
double r27602 = sqrt(r27601);
double r27603 = r27597 * r27602;
double r27604 = -5.091836382390402e-262;
bool r27605 = r27594 <= r27604;
double r27606 = r27594 * r27594;
double r27607 = im;
double r27608 = r27607 * r27607;
double r27609 = r27606 + r27608;
double r27610 = sqrt(r27609);
double r27611 = r27610 - r27594;
double r27612 = r27598 * r27611;
double r27613 = sqrt(r27612);
double r27614 = r27597 * r27613;
double r27615 = 2.5823924790830883e+125;
bool r27616 = r27594 <= r27615;
double r27617 = sqrt(r27598);
double r27618 = sqrt(r27617);
double r27619 = fabs(r27607);
double r27620 = r27610 + r27594;
double r27621 = sqrt(r27620);
double r27622 = r27619 / r27621;
double r27623 = r27618 * r27622;
double r27624 = r27618 * r27623;
double r27625 = r27597 * r27624;
double r27626 = r27594 + r27594;
double r27627 = sqrt(r27626);
double r27628 = r27619 / r27627;
double r27629 = r27617 * r27628;
double r27630 = r27597 * r27629;
double r27631 = r27616 ? r27625 : r27630;
double r27632 = r27605 ? r27614 : r27631;
double r27633 = r27596 ? r27603 : r27632;
return r27633;
}



Bits error versus re



Bits error versus im
Results
if re < -6.439772273490177e+138Initial program 59.2
rmApplied add-cube-cbrt59.3
Taylor expanded around -inf 8.4
if -6.439772273490177e+138 < re < -5.091836382390402e-262Initial program 20.2
if -5.091836382390402e-262 < re < 2.5823924790830883e+125Initial program 38.1
rmApplied flip--38.0
Applied associate-*r/38.1
Applied sqrt-div38.3
Simplified29.9
rmApplied *-un-lft-identity29.9
Applied sqrt-prod29.9
Applied sqrt-prod29.9
Applied times-frac29.9
Simplified29.9
Simplified21.6
rmApplied add-sqr-sqrt21.6
Applied sqrt-prod21.6
Applied associate-*l*21.6
if 2.5823924790830883e+125 < re Initial program 62.2
rmApplied flip--62.2
Applied associate-*r/62.2
Applied sqrt-div62.2
Simplified46.0
rmApplied *-un-lft-identity46.0
Applied sqrt-prod46.0
Applied sqrt-prod46.0
Applied times-frac46.0
Simplified46.0
Simplified44.4
Taylor expanded around inf 9.4
Final simplification17.5
herbie shell --seed 2019199
(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)))))