0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -0.9300445648018506039633734872040804475546:\\
\;\;\;\;\sqrt{\left(\left(-re\right) - re\right) \cdot 2} \cdot 0.5\\
\mathbf{elif}\;re \le -1.804325587472309059445455260565415641021 \cdot 10^{-126}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\right)\\
\mathbf{elif}\;re \le -8.797695074974849120444683689577616435215 \cdot 10^{-204}:\\
\;\;\;\;\sqrt{\left(\left(-re\right) - re\right) \cdot 2} \cdot 0.5\\
\mathbf{elif}\;re \le 1.04534226433947057286938009688293700363 \cdot 10^{108}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{re + re}} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r28860 = 0.5;
double r28861 = 2.0;
double r28862 = re;
double r28863 = r28862 * r28862;
double r28864 = im;
double r28865 = r28864 * r28864;
double r28866 = r28863 + r28865;
double r28867 = sqrt(r28866);
double r28868 = r28867 - r28862;
double r28869 = r28861 * r28868;
double r28870 = sqrt(r28869);
double r28871 = r28860 * r28870;
return r28871;
}
double f(double re, double im) {
double r28872 = re;
double r28873 = -0.9300445648018506;
bool r28874 = r28872 <= r28873;
double r28875 = -r28872;
double r28876 = r28875 - r28872;
double r28877 = 2.0;
double r28878 = r28876 * r28877;
double r28879 = sqrt(r28878);
double r28880 = 0.5;
double r28881 = r28879 * r28880;
double r28882 = -1.804325587472309e-126;
bool r28883 = r28872 <= r28882;
double r28884 = sqrt(r28877);
double r28885 = im;
double r28886 = fabs(r28885);
double r28887 = r28872 * r28872;
double r28888 = r28885 * r28885;
double r28889 = r28887 + r28888;
double r28890 = sqrt(r28889);
double r28891 = r28872 + r28890;
double r28892 = sqrt(r28891);
double r28893 = r28886 / r28892;
double r28894 = r28884 * r28893;
double r28895 = r28880 * r28894;
double r28896 = -8.797695074974849e-204;
bool r28897 = r28872 <= r28896;
double r28898 = 1.0453422643394706e+108;
bool r28899 = r28872 <= r28898;
double r28900 = r28884 * r28886;
double r28901 = r28900 / r28892;
double r28902 = r28880 * r28901;
double r28903 = r28888 * r28877;
double r28904 = sqrt(r28903);
double r28905 = r28872 + r28872;
double r28906 = sqrt(r28905);
double r28907 = r28904 / r28906;
double r28908 = r28907 * r28880;
double r28909 = r28899 ? r28902 : r28908;
double r28910 = r28897 ? r28881 : r28909;
double r28911 = r28883 ? r28895 : r28910;
double r28912 = r28874 ? r28881 : r28911;
return r28912;
}



Bits error versus re



Bits error versus im
Results
if re < -0.9300445648018506 or -1.804325587472309e-126 < re < -8.797695074974849e-204Initial program 37.3
Simplified37.3
Taylor expanded around -inf 21.8
Simplified21.8
if -0.9300445648018506 < re < -1.804325587472309e-126Initial program 14.7
Simplified14.7
rmApplied flip--38.8
Applied associate-*l/38.8
Applied sqrt-div38.9
Simplified38.9
Simplified38.9
rmApplied *-un-lft-identity38.9
Applied sqrt-prod38.9
Applied sqrt-prod39.0
Applied times-frac39.0
Simplified39.0
Simplified38.6
if -8.797695074974849e-204 < re < 1.0453422643394706e+108Initial program 35.7
Simplified35.7
rmApplied flip--35.9
Applied associate-*l/35.9
Applied sqrt-div36.1
Simplified29.5
Simplified29.5
rmApplied sqrt-prod29.6
Simplified21.7
if 1.0453422643394706e+108 < re Initial program 61.8
Simplified61.8
rmApplied flip--61.8
Applied associate-*l/61.8
Applied sqrt-div61.8
Simplified44.1
Simplified44.1
Taylor expanded around 0 21.8
Final simplification23.6
herbie shell --seed 2019194
(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)))))