0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -8.615973159790100816135112956922113830758 \cdot 10^{-204}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le 2.88234410399163811959624616338485820472 \cdot 10^{143}:\\
\;\;\;\;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{2 \cdot re}}\right)\\
\end{array}double f(double re, double im) {
double r25903 = 0.5;
double r25904 = 2.0;
double r25905 = re;
double r25906 = r25905 * r25905;
double r25907 = im;
double r25908 = r25907 * r25907;
double r25909 = r25906 + r25908;
double r25910 = sqrt(r25909);
double r25911 = r25910 - r25905;
double r25912 = r25904 * r25911;
double r25913 = sqrt(r25912);
double r25914 = r25903 * r25913;
return r25914;
}
double f(double re, double im) {
double r25915 = re;
double r25916 = -8.615973159790101e-204;
bool r25917 = r25915 <= r25916;
double r25918 = 0.5;
double r25919 = 2.0;
double r25920 = -2.0;
double r25921 = r25920 * r25915;
double r25922 = r25919 * r25921;
double r25923 = sqrt(r25922);
double r25924 = r25918 * r25923;
double r25925 = 2.882344103991638e+143;
bool r25926 = r25915 <= r25925;
double r25927 = sqrt(r25919);
double r25928 = sqrt(r25927);
double r25929 = im;
double r25930 = fabs(r25929);
double r25931 = r25915 * r25915;
double r25932 = r25929 * r25929;
double r25933 = r25931 + r25932;
double r25934 = sqrt(r25933);
double r25935 = r25934 + r25915;
double r25936 = sqrt(r25935);
double r25937 = r25930 / r25936;
double r25938 = r25928 * r25937;
double r25939 = r25928 * r25938;
double r25940 = r25918 * r25939;
double r25941 = 2.0;
double r25942 = r25941 * r25915;
double r25943 = sqrt(r25942);
double r25944 = r25930 / r25943;
double r25945 = r25927 * r25944;
double r25946 = r25918 * r25945;
double r25947 = r25926 ? r25940 : r25946;
double r25948 = r25917 ? r25924 : r25947;
return r25948;
}



Bits error versus re



Bits error versus im
Results
if re < -8.615973159790101e-204Initial program 31.9
Taylor expanded around -inf 25.2
if -8.615973159790101e-204 < re < 2.882344103991638e+143Initial program 37.5
rmApplied flip--37.6
Applied associate-*r/37.6
Applied sqrt-div37.9
Simplified29.5
rmApplied *-un-lft-identity29.5
Applied sqrt-prod29.5
Applied sqrt-prod29.6
Applied times-frac29.6
Simplified29.6
Simplified22.4
rmApplied add-sqr-sqrt22.4
Applied sqrt-prod22.4
Applied associate-*l*22.4
if 2.882344103991638e+143 < re Initial program 63.1
rmApplied flip--63.1
Applied associate-*r/63.1
Applied sqrt-div63.1
Simplified49.3
rmApplied *-un-lft-identity49.3
Applied sqrt-prod49.3
Applied sqrt-prod49.3
Applied times-frac49.3
Simplified49.3
Simplified48.2
Taylor expanded around inf 9.0
Final simplification21.8
herbie shell --seed 2019323
(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)))))