0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -8.1561596166685901 \cdot 10^{125}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;re \le -3.80996693730795831 \cdot 10^{-103}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot {\left(\sqrt{re \cdot re + im \cdot im}\right)}^{\frac{3}{4}} - re\right)}\\
\mathbf{elif}\;re \le 2.33673518569970664 \cdot 10^{-296}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im + 0}{\sqrt{re \cdot re + im \cdot im} + re}}\\
\end{array}double f(double re, double im) {
double r15927 = 0.5;
double r15928 = 2.0;
double r15929 = re;
double r15930 = r15929 * r15929;
double r15931 = im;
double r15932 = r15931 * r15931;
double r15933 = r15930 + r15932;
double r15934 = sqrt(r15933);
double r15935 = r15934 - r15929;
double r15936 = r15928 * r15935;
double r15937 = sqrt(r15936);
double r15938 = r15927 * r15937;
return r15938;
}
double f(double re, double im) {
double r15939 = re;
double r15940 = -8.15615961666859e+125;
bool r15941 = r15939 <= r15940;
double r15942 = 0.5;
double r15943 = 2.0;
double r15944 = -1.0;
double r15945 = r15944 * r15939;
double r15946 = r15945 - r15939;
double r15947 = r15943 * r15946;
double r15948 = sqrt(r15947);
double r15949 = r15942 * r15948;
double r15950 = -3.8099669373079583e-103;
bool r15951 = r15939 <= r15950;
double r15952 = r15939 * r15939;
double r15953 = im;
double r15954 = r15953 * r15953;
double r15955 = r15952 + r15954;
double r15956 = sqrt(r15955);
double r15957 = sqrt(r15956);
double r15958 = sqrt(r15957);
double r15959 = 0.75;
double r15960 = pow(r15956, r15959);
double r15961 = r15958 * r15960;
double r15962 = r15961 - r15939;
double r15963 = r15943 * r15962;
double r15964 = sqrt(r15963);
double r15965 = r15942 * r15964;
double r15966 = 2.3367351856997066e-296;
bool r15967 = r15939 <= r15966;
double r15968 = r15953 - r15939;
double r15969 = r15943 * r15968;
double r15970 = sqrt(r15969);
double r15971 = r15942 * r15970;
double r15972 = 0.0;
double r15973 = r15954 + r15972;
double r15974 = r15956 + r15939;
double r15975 = r15973 / r15974;
double r15976 = r15943 * r15975;
double r15977 = sqrt(r15976);
double r15978 = r15942 * r15977;
double r15979 = r15967 ? r15971 : r15978;
double r15980 = r15951 ? r15965 : r15979;
double r15981 = r15941 ? r15949 : r15980;
return r15981;
}



Bits error versus re



Bits error versus im
Results
if re < -8.15615961666859e+125Initial program 55.6
Taylor expanded around -inf 9.1
if -8.15615961666859e+125 < re < -3.8099669373079583e-103Initial program 16.4
rmApplied add-sqr-sqrt16.4
Applied sqrt-prod16.5
rmApplied add-sqr-sqrt16.5
Applied sqrt-prod16.5
Applied sqrt-prod16.5
Applied associate-*l*16.5
Simplified16.6
rmApplied pow1/216.6
Applied sqrt-pow116.6
Applied pow-pow16.5
Simplified16.5
if -3.8099669373079583e-103 < re < 2.3367351856997066e-296Initial program 26.8
Taylor expanded around 0 34.8
if 2.3367351856997066e-296 < re Initial program 45.9
rmApplied add-sqr-sqrt46.0
rmApplied flip--46.0
Applied sqrt-div45.9
Applied flip--45.8
Applied sqrt-div45.9
Applied frac-times45.9
Simplified35.7
Simplified35.7
Final simplification28.0
herbie shell --seed 2020100
(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)))))