0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -4.1094940511471951 \cdot 10^{119}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -1.3723278512607863 \cdot 10^{-307}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{1}} \cdot \sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{{im}^{2} \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r17588 = 0.5;
double r17589 = 2.0;
double r17590 = re;
double r17591 = r17590 * r17590;
double r17592 = im;
double r17593 = r17592 * r17592;
double r17594 = r17591 + r17593;
double r17595 = sqrt(r17594);
double r17596 = r17595 - r17590;
double r17597 = r17589 * r17596;
double r17598 = sqrt(r17597);
double r17599 = r17588 * r17598;
return r17599;
}
double f(double re, double im) {
double r17600 = re;
double r17601 = -4.109494051147195e+119;
bool r17602 = r17600 <= r17601;
double r17603 = 0.5;
double r17604 = 2.0;
double r17605 = -2.0;
double r17606 = r17605 * r17600;
double r17607 = r17604 * r17606;
double r17608 = sqrt(r17607);
double r17609 = r17603 * r17608;
double r17610 = -1.3723278512607863e-307;
bool r17611 = r17600 <= r17610;
double r17612 = 1.0;
double r17613 = sqrt(r17612);
double r17614 = sqrt(r17613);
double r17615 = r17600 * r17600;
double r17616 = im;
double r17617 = r17616 * r17616;
double r17618 = r17615 + r17617;
double r17619 = sqrt(r17618);
double r17620 = r17614 * r17619;
double r17621 = r17620 - r17600;
double r17622 = r17604 * r17621;
double r17623 = sqrt(r17622);
double r17624 = r17603 * r17623;
double r17625 = 2.0;
double r17626 = pow(r17616, r17625);
double r17627 = r17626 * r17604;
double r17628 = sqrt(r17627);
double r17629 = r17619 + r17600;
double r17630 = sqrt(r17629);
double r17631 = r17628 / r17630;
double r17632 = r17631 * r17603;
double r17633 = r17611 ? r17624 : r17632;
double r17634 = r17602 ? r17609 : r17633;
return r17634;
}



Bits error versus re



Bits error versus im
Results
if re < -4.109494051147195e+119Initial program 55.2
Taylor expanded around -inf 9.8
if -4.109494051147195e+119 < re < -1.3723278512607863e-307Initial program 20.1
rmApplied add-sqr-sqrt20.1
Applied sqrt-prod20.2
rmApplied *-un-lft-identity20.2
Applied sqrt-prod20.2
Applied sqrt-prod20.2
Applied associate-*l*20.2
Simplified20.1
if -1.3723278512607863e-307 < re Initial program 46.2
rmApplied flip--46.1
Applied associate-*r/46.1
Applied sqrt-div46.2
Simplified35.4
Final simplification26.1
herbie shell --seed 2020042
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
:precision binary64
(* 0.5 (sqrt (* 2 (- (sqrt (+ (* re re) (* im im))) re)))))