0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.688721359903120564949235071844216306814 \cdot 10^{100}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2} \cdot 0.5\\
\mathbf{elif}\;re \le -9.064518896973367303560175417863365194412 \cdot 10^{-262}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt{\sqrt{im \cdot im + re \cdot re}}} \cdot \left(\sqrt{\sqrt{\sqrt{im \cdot im + re \cdot re}}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}}\right) - re\right) \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{2 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r1089906 = 0.5;
double r1089907 = 2.0;
double r1089908 = re;
double r1089909 = r1089908 * r1089908;
double r1089910 = im;
double r1089911 = r1089910 * r1089910;
double r1089912 = r1089909 + r1089911;
double r1089913 = sqrt(r1089912);
double r1089914 = r1089913 - r1089908;
double r1089915 = r1089907 * r1089914;
double r1089916 = sqrt(r1089915);
double r1089917 = r1089906 * r1089916;
return r1089917;
}
double f(double re, double im) {
double r1089918 = re;
double r1089919 = -1.6887213599031206e+100;
bool r1089920 = r1089918 <= r1089919;
double r1089921 = -2.0;
double r1089922 = r1089921 * r1089918;
double r1089923 = 2.0;
double r1089924 = r1089922 * r1089923;
double r1089925 = sqrt(r1089924);
double r1089926 = 0.5;
double r1089927 = r1089925 * r1089926;
double r1089928 = -9.064518896973367e-262;
bool r1089929 = r1089918 <= r1089928;
double r1089930 = im;
double r1089931 = r1089930 * r1089930;
double r1089932 = r1089918 * r1089918;
double r1089933 = r1089931 + r1089932;
double r1089934 = sqrt(r1089933);
double r1089935 = sqrt(r1089934);
double r1089936 = sqrt(r1089935);
double r1089937 = r1089936 * r1089935;
double r1089938 = r1089936 * r1089937;
double r1089939 = r1089938 - r1089918;
double r1089940 = r1089939 * r1089923;
double r1089941 = sqrt(r1089940);
double r1089942 = r1089926 * r1089941;
double r1089943 = r1089934 + r1089918;
double r1089944 = r1089931 / r1089943;
double r1089945 = r1089923 * r1089944;
double r1089946 = sqrt(r1089945);
double r1089947 = r1089946 * r1089926;
double r1089948 = r1089929 ? r1089942 : r1089947;
double r1089949 = r1089920 ? r1089927 : r1089948;
return r1089949;
}



Bits error versus re



Bits error versus im
Results
if re < -1.6887213599031206e+100Initial program 51.8
Taylor expanded around -inf 10.5
if -1.6887213599031206e+100 < re < -9.064518896973367e-262Initial program 20.3
rmApplied add-sqr-sqrt20.3
Applied sqrt-prod20.4
rmApplied add-sqr-sqrt20.4
Applied sqrt-prod20.4
Applied sqrt-prod20.4
Applied associate-*r*20.4
if -9.064518896973367e-262 < re Initial program 44.8
rmApplied add-sqr-sqrt44.8
Applied sqrt-prod45.6
rmApplied flip--45.6
Simplified35.7
Simplified35.6
Final simplification26.8
herbie shell --seed 2019171
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
(* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))