0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.01553741283133633 \cdot 10^{107}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -1.1227336800725336 \cdot 10^{-247}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}} - re\right)}\\
\mathbf{elif}\;re \le 3.3295675416621997 \cdot 10^{-138}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\
\end{array}double f(double re, double im) {
double r17692 = 0.5;
double r17693 = 2.0;
double r17694 = re;
double r17695 = r17694 * r17694;
double r17696 = im;
double r17697 = r17696 * r17696;
double r17698 = r17695 + r17697;
double r17699 = sqrt(r17698);
double r17700 = r17699 - r17694;
double r17701 = r17693 * r17700;
double r17702 = sqrt(r17701);
double r17703 = r17692 * r17702;
return r17703;
}
double f(double re, double im) {
double r17704 = re;
double r17705 = -1.0155374128313363e+107;
bool r17706 = r17704 <= r17705;
double r17707 = 0.5;
double r17708 = 2.0;
double r17709 = -2.0;
double r17710 = r17709 * r17704;
double r17711 = r17708 * r17710;
double r17712 = sqrt(r17711);
double r17713 = r17707 * r17712;
double r17714 = -1.1227336800725336e-247;
bool r17715 = r17704 <= r17714;
double r17716 = r17704 * r17704;
double r17717 = im;
double r17718 = r17717 * r17717;
double r17719 = r17716 + r17718;
double r17720 = cbrt(r17719);
double r17721 = fabs(r17720);
double r17722 = sqrt(r17719);
double r17723 = cbrt(r17722);
double r17724 = r17723 * r17723;
double r17725 = sqrt(r17724);
double r17726 = r17721 * r17725;
double r17727 = r17726 - r17704;
double r17728 = r17708 * r17727;
double r17729 = sqrt(r17728);
double r17730 = r17707 * r17729;
double r17731 = 3.3295675416622e-138;
bool r17732 = r17704 <= r17731;
double r17733 = r17717 - r17704;
double r17734 = r17708 * r17733;
double r17735 = sqrt(r17734);
double r17736 = r17707 * r17735;
double r17737 = r17718 * r17708;
double r17738 = sqrt(r17737);
double r17739 = r17722 + r17704;
double r17740 = sqrt(r17739);
double r17741 = r17738 / r17740;
double r17742 = r17707 * r17741;
double r17743 = r17732 ? r17736 : r17742;
double r17744 = r17715 ? r17730 : r17743;
double r17745 = r17706 ? r17713 : r17744;
return r17745;
}



Bits error versus re



Bits error versus im
Results
if re < -1.0155374128313363e+107Initial program 52.5
Taylor expanded around -inf 10.7
if -1.0155374128313363e+107 < re < -1.1227336800725336e-247Initial program 19.0
rmApplied add-cube-cbrt19.3
Applied sqrt-prod19.3
Simplified19.3
rmApplied add-sqr-sqrt19.3
Applied cbrt-prod19.3
if -1.1227336800725336e-247 < re < 3.3295675416622e-138Initial program 31.5
Taylor expanded around 0 35.4
if 3.3295675416622e-138 < re Initial program 51.5
rmApplied flip--51.5
Applied associate-*r/51.5
Applied sqrt-div51.6
Simplified36.3
Final simplification26.9
herbie shell --seed 2020043
(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)))))