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 r28849 = 0.5;
double r28850 = 2.0;
double r28851 = re;
double r28852 = r28851 * r28851;
double r28853 = im;
double r28854 = r28853 * r28853;
double r28855 = r28852 + r28854;
double r28856 = sqrt(r28855);
double r28857 = r28856 - r28851;
double r28858 = r28850 * r28857;
double r28859 = sqrt(r28858);
double r28860 = r28849 * r28859;
return r28860;
}
double f(double re, double im) {
double r28861 = re;
double r28862 = -0.9300445648018506;
bool r28863 = r28861 <= r28862;
double r28864 = -r28861;
double r28865 = r28864 - r28861;
double r28866 = 2.0;
double r28867 = r28865 * r28866;
double r28868 = sqrt(r28867);
double r28869 = 0.5;
double r28870 = r28868 * r28869;
double r28871 = -1.804325587472309e-126;
bool r28872 = r28861 <= r28871;
double r28873 = sqrt(r28866);
double r28874 = im;
double r28875 = fabs(r28874);
double r28876 = r28861 * r28861;
double r28877 = r28874 * r28874;
double r28878 = r28876 + r28877;
double r28879 = sqrt(r28878);
double r28880 = r28861 + r28879;
double r28881 = sqrt(r28880);
double r28882 = r28875 / r28881;
double r28883 = r28873 * r28882;
double r28884 = r28869 * r28883;
double r28885 = -8.797695074974849e-204;
bool r28886 = r28861 <= r28885;
double r28887 = 1.0453422643394706e+108;
bool r28888 = r28861 <= r28887;
double r28889 = r28873 * r28875;
double r28890 = r28889 / r28881;
double r28891 = r28869 * r28890;
double r28892 = r28877 * r28866;
double r28893 = sqrt(r28892);
double r28894 = r28861 + r28861;
double r28895 = sqrt(r28894);
double r28896 = r28893 / r28895;
double r28897 = r28896 * r28869;
double r28898 = r28888 ? r28891 : r28897;
double r28899 = r28886 ? r28870 : r28898;
double r28900 = r28872 ? r28884 : r28899;
double r28901 = r28863 ? r28870 : r28900;
return r28901;
}



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)))))