0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -5.5777813673616158 \cdot 10^{127}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;re \le -2.5763601950204309 \cdot 10^{-265}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|\sqrt[3]{re \cdot re + im \cdot im}\right| \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;re \le 1.27662858127337166 \cdot 10^{-281}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{re + im}\right)}\\
\mathbf{elif}\;re \le 2.694808318755371 \cdot 10^{-253}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\left|im\right| \cdot \frac{\sqrt[3]{\left|im\right|} \cdot \sqrt[3]{\left|im\right|}}{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} + re} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im} + re}}\right) \cdot \frac{\sqrt[3]{\left|im\right|}}{\sqrt[3]{\sqrt{re \cdot re + im \cdot im} + re}}\right)}\\
\mathbf{elif}\;re \le 8.6973947796722868 \cdot 10^{-128}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;re \le 4.94013962552010715 \cdot 10^{141}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(\left|im\right| \cdot \left|im\right|\right)}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{re + re}\right)}\\
\end{array}double f(double re, double im) {
double r20974 = 0.5;
double r20975 = 2.0;
double r20976 = re;
double r20977 = r20976 * r20976;
double r20978 = im;
double r20979 = r20978 * r20978;
double r20980 = r20977 + r20979;
double r20981 = sqrt(r20980);
double r20982 = r20981 - r20976;
double r20983 = r20975 * r20982;
double r20984 = sqrt(r20983);
double r20985 = r20974 * r20984;
return r20985;
}
double f(double re, double im) {
double r20986 = re;
double r20987 = -5.577781367361616e+127;
bool r20988 = r20986 <= r20987;
double r20989 = 0.5;
double r20990 = 2.0;
double r20991 = -1.0;
double r20992 = r20991 * r20986;
double r20993 = r20992 - r20986;
double r20994 = r20990 * r20993;
double r20995 = sqrt(r20994);
double r20996 = r20989 * r20995;
double r20997 = -2.576360195020431e-265;
bool r20998 = r20986 <= r20997;
double r20999 = r20986 * r20986;
double r21000 = im;
double r21001 = r21000 * r21000;
double r21002 = r20999 + r21001;
double r21003 = cbrt(r21002);
double r21004 = fabs(r21003);
double r21005 = sqrt(r21003);
double r21006 = r21004 * r21005;
double r21007 = r21006 - r20986;
double r21008 = r20990 * r21007;
double r21009 = sqrt(r21008);
double r21010 = r20989 * r21009;
double r21011 = 1.2766285812733717e-281;
bool r21012 = r20986 <= r21011;
double r21013 = fabs(r21000);
double r21014 = r20986 + r21000;
double r21015 = r21013 / r21014;
double r21016 = r21013 * r21015;
double r21017 = r20990 * r21016;
double r21018 = sqrt(r21017);
double r21019 = r20989 * r21018;
double r21020 = 2.694808318755371e-253;
bool r21021 = r20986 <= r21020;
double r21022 = cbrt(r21013);
double r21023 = r21022 * r21022;
double r21024 = sqrt(r21002);
double r21025 = r21024 + r20986;
double r21026 = cbrt(r21025);
double r21027 = r21026 * r21026;
double r21028 = r21023 / r21027;
double r21029 = r21013 * r21028;
double r21030 = r21022 / r21026;
double r21031 = r21029 * r21030;
double r21032 = r20990 * r21031;
double r21033 = sqrt(r21032);
double r21034 = r20989 * r21033;
double r21035 = 8.697394779672287e-128;
bool r21036 = r20986 <= r21035;
double r21037 = -r21014;
double r21038 = r20990 * r21037;
double r21039 = sqrt(r21038);
double r21040 = r20989 * r21039;
double r21041 = 4.940139625520107e+141;
bool r21042 = r20986 <= r21041;
double r21043 = r21013 * r21013;
double r21044 = r20990 * r21043;
double r21045 = sqrt(r21044);
double r21046 = sqrt(r21025);
double r21047 = r21045 / r21046;
double r21048 = r20989 * r21047;
double r21049 = r20986 + r20986;
double r21050 = r21013 / r21049;
double r21051 = r21013 * r21050;
double r21052 = r20990 * r21051;
double r21053 = sqrt(r21052);
double r21054 = r20989 * r21053;
double r21055 = r21042 ? r21048 : r21054;
double r21056 = r21036 ? r21040 : r21055;
double r21057 = r21021 ? r21034 : r21056;
double r21058 = r21012 ? r21019 : r21057;
double r21059 = r20998 ? r21010 : r21058;
double r21060 = r20988 ? r20996 : r21059;
return r21060;
}



Bits error versus re



Bits error versus im
Results
if re < -5.577781367361616e+127Initial program 56.4
Taylor expanded around -inf 9.0
if -5.577781367361616e+127 < re < -2.576360195020431e-265Initial program 20.6
rmApplied add-cube-cbrt20.8
Applied sqrt-prod20.8
Simplified20.8
if -2.576360195020431e-265 < re < 1.2766285812733717e-281Initial program 30.9
rmApplied flip--31.2
Simplified31.2
rmApplied *-un-lft-identity31.2
Applied add-sqr-sqrt31.2
Applied times-frac31.2
Simplified30.8
Simplified30.9
Taylor expanded around 0 33.5
if 1.2766285812733717e-281 < re < 2.694808318755371e-253Initial program 34.2
rmApplied flip--33.5
Simplified33.5
rmApplied *-un-lft-identity33.5
Applied add-sqr-sqrt33.5
Applied times-frac33.5
Simplified33.3
Simplified32.0
rmApplied add-cube-cbrt32.4
Applied add-cube-cbrt32.0
Applied times-frac32.0
Applied associate-*r*32.0
if 2.694808318755371e-253 < re < 8.697394779672287e-128Initial program 32.4
rmApplied flip--31.9
Simplified31.6
Taylor expanded around -inf 36.8
if 8.697394779672287e-128 < re < 4.940139625520107e+141Initial program 45.0
rmApplied flip--45.0
Simplified30.2
rmApplied *-un-lft-identity30.2
Applied add-sqr-sqrt30.2
Applied times-frac30.2
Simplified30.2
Simplified28.5
rmApplied associate-*r/30.2
Applied associate-*r/30.2
Applied sqrt-div28.4
if 4.940139625520107e+141 < re Initial program 63.4
rmApplied flip--63.4
Simplified48.9
rmApplied *-un-lft-identity48.9
Applied add-sqr-sqrt48.9
Applied times-frac48.9
Simplified48.9
Simplified48.5
Taylor expanded around inf 23.4
Final simplification23.7
herbie shell --seed 2020046
(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)))))