0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -4.897683977595771520042626230283605489407 \cdot 10^{115}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\
\mathbf{elif}\;re \le -4.355700987739906589936225213989573011868 \cdot 10^{-198}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right) \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;re \le -2.437299774034011283254659821557789091298 \cdot 10^{-288}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 8.545763741641591962502963215263134626571 \cdot 10^{113}:\\
\;\;\;\;\frac{1}{\frac{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}{\sqrt{2}}} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{re + re}}{\left|im\right|}}\\
\end{array}double f(double re, double im) {
double r27925 = 0.5;
double r27926 = 2.0;
double r27927 = re;
double r27928 = r27927 * r27927;
double r27929 = im;
double r27930 = r27929 * r27929;
double r27931 = r27928 + r27930;
double r27932 = sqrt(r27931);
double r27933 = r27932 - r27927;
double r27934 = r27926 * r27933;
double r27935 = sqrt(r27934);
double r27936 = r27925 * r27935;
return r27936;
}
double f(double re, double im) {
double r27937 = re;
double r27938 = -4.8976839775957715e+115;
bool r27939 = r27937 <= r27938;
double r27940 = 0.5;
double r27941 = 2.0;
double r27942 = -r27937;
double r27943 = r27942 - r27937;
double r27944 = r27941 * r27943;
double r27945 = sqrt(r27944);
double r27946 = r27940 * r27945;
double r27947 = -4.3557009877399066e-198;
bool r27948 = r27937 <= r27947;
double r27949 = r27937 * r27937;
double r27950 = im;
double r27951 = r27950 * r27950;
double r27952 = r27949 + r27951;
double r27953 = sqrt(r27952);
double r27954 = cbrt(r27953);
double r27955 = r27954 * r27954;
double r27956 = r27955 * r27954;
double r27957 = r27956 - r27937;
double r27958 = r27941 * r27957;
double r27959 = sqrt(r27958);
double r27960 = r27940 * r27959;
double r27961 = -2.4372997740340113e-288;
bool r27962 = r27937 <= r27961;
double r27963 = r27950 - r27937;
double r27964 = r27941 * r27963;
double r27965 = sqrt(r27964);
double r27966 = r27940 * r27965;
double r27967 = 8.545763741641592e+113;
bool r27968 = r27937 <= r27967;
double r27969 = 1.0;
double r27970 = r27953 + r27937;
double r27971 = sqrt(r27970);
double r27972 = fabs(r27950);
double r27973 = r27971 / r27972;
double r27974 = sqrt(r27941);
double r27975 = r27973 / r27974;
double r27976 = r27969 / r27975;
double r27977 = r27976 * r27940;
double r27978 = r27937 + r27937;
double r27979 = sqrt(r27978);
double r27980 = r27979 / r27972;
double r27981 = r27974 / r27980;
double r27982 = r27940 * r27981;
double r27983 = r27968 ? r27977 : r27982;
double r27984 = r27962 ? r27966 : r27983;
double r27985 = r27948 ? r27960 : r27984;
double r27986 = r27939 ? r27946 : r27985;
return r27986;
}



Bits error versus re



Bits error versus im
Results
if re < -4.8976839775957715e+115Initial program 54.9
Taylor expanded around -inf 9.0
Simplified9.0
if -4.8976839775957715e+115 < re < -4.3557009877399066e-198Initial program 18.0
rmApplied add-cube-cbrt18.5
if -4.3557009877399066e-198 < re < -2.4372997740340113e-288Initial program 27.7
Taylor expanded around 0 31.9
if -2.4372997740340113e-288 < re < 8.545763741641592e+113Initial program 38.8
rmApplied flip--38.6
Applied associate-*r/38.7
Applied sqrt-div38.8
Simplified30.6
rmApplied sqrt-prod30.6
Applied associate-/l*30.6
Simplified21.4
rmApplied *-un-lft-identity21.4
Applied sqrt-prod21.4
Applied associate-/l*21.4
if 8.545763741641592e+113 < re Initial program 61.4
rmApplied flip--61.4
Applied associate-*r/61.4
Applied sqrt-div61.4
Simplified45.7
rmApplied sqrt-prod45.7
Applied associate-/l*45.7
Simplified43.6
Taylor expanded around inf 11.1
Final simplification17.8
herbie shell --seed 2019347
(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)))))