0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -1.830593939920810112608139818514622745005 \cdot 10^{158}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2}\\
\mathbf{elif}\;im \le -1.229710331229253200153366570596649446976 \cdot 10^{117}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\left|im\right| \cdot \frac{\left|im\right|}{re + re}\right) \cdot 2}\\
\mathbf{elif}\;im \le -9.390513393497782190380660056887968197315 \cdot 10^{-96}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\frac{\sqrt{\left|im\right|}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}} \cdot \left|im\right|\right) \cdot \frac{\sqrt{\left|im\right|}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\right)}\\
\mathbf{elif}\;im \le 1.032556161458273784812719104349678483108 \cdot 10^{-163}:\\
\;\;\;\;\sqrt{\left(re \cdot -2\right) \cdot 2} \cdot 0.5\\
\mathbf{elif}\;im \le 69391599698798919680:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\
\mathbf{elif}\;im \le 2580378641751245051012166718410719232:\\
\;\;\;\;\sqrt{\left(re \cdot -2\right) \cdot 2} \cdot 0.5\\
\mathbf{elif}\;im \le 8.312232129912929054540202378596483167996 \cdot 10^{97}:\\
\;\;\;\;\sqrt{\left(\left(\left(\sqrt[3]{\frac{\left|im\right|}{re + \sqrt{im \cdot im + re \cdot re}}} \cdot \sqrt[3]{\frac{\left|im\right|}{re + \sqrt{im \cdot im + re \cdot re}}}\right) \cdot \left|im\right|\right) \cdot \sqrt[3]{\frac{\left|im\right|}{re + \sqrt{im \cdot im + re \cdot re}}}\right) \cdot 2} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\left(\frac{\left|im\right|}{re + im} \cdot \left|im\right|\right) \cdot 2} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r637851 = 0.5;
double r637852 = 2.0;
double r637853 = re;
double r637854 = r637853 * r637853;
double r637855 = im;
double r637856 = r637855 * r637855;
double r637857 = r637854 + r637856;
double r637858 = sqrt(r637857);
double r637859 = r637858 - r637853;
double r637860 = r637852 * r637859;
double r637861 = sqrt(r637860);
double r637862 = r637851 * r637861;
return r637862;
}
double f(double re, double im) {
double r637863 = im;
double r637864 = -1.83059393992081e+158;
bool r637865 = r637863 <= r637864;
double r637866 = 0.5;
double r637867 = re;
double r637868 = r637867 + r637863;
double r637869 = -r637868;
double r637870 = 2.0;
double r637871 = r637869 * r637870;
double r637872 = sqrt(r637871);
double r637873 = r637866 * r637872;
double r637874 = -1.2297103312292532e+117;
bool r637875 = r637863 <= r637874;
double r637876 = fabs(r637863);
double r637877 = r637867 + r637867;
double r637878 = r637876 / r637877;
double r637879 = r637876 * r637878;
double r637880 = r637879 * r637870;
double r637881 = sqrt(r637880);
double r637882 = r637866 * r637881;
double r637883 = -9.390513393497782e-96;
bool r637884 = r637863 <= r637883;
double r637885 = sqrt(r637876);
double r637886 = r637863 * r637863;
double r637887 = r637867 * r637867;
double r637888 = r637886 + r637887;
double r637889 = sqrt(r637888);
double r637890 = r637867 + r637889;
double r637891 = sqrt(r637890);
double r637892 = r637885 / r637891;
double r637893 = r637892 * r637876;
double r637894 = r637893 * r637892;
double r637895 = r637870 * r637894;
double r637896 = sqrt(r637895);
double r637897 = r637866 * r637896;
double r637898 = 1.0325561614582738e-163;
bool r637899 = r637863 <= r637898;
double r637900 = -2.0;
double r637901 = r637867 * r637900;
double r637902 = r637901 * r637870;
double r637903 = sqrt(r637902);
double r637904 = r637903 * r637866;
double r637905 = 6.939159969879892e+19;
bool r637906 = r637863 <= r637905;
double r637907 = r637870 * r637886;
double r637908 = sqrt(r637907);
double r637909 = r637908 / r637891;
double r637910 = r637866 * r637909;
double r637911 = 2.580378641751245e+36;
bool r637912 = r637863 <= r637911;
double r637913 = 8.312232129912929e+97;
bool r637914 = r637863 <= r637913;
double r637915 = r637876 / r637890;
double r637916 = cbrt(r637915);
double r637917 = r637916 * r637916;
double r637918 = r637917 * r637876;
double r637919 = r637918 * r637916;
double r637920 = r637919 * r637870;
double r637921 = sqrt(r637920);
double r637922 = r637921 * r637866;
double r637923 = r637876 / r637868;
double r637924 = r637923 * r637876;
double r637925 = r637924 * r637870;
double r637926 = sqrt(r637925);
double r637927 = r637926 * r637866;
double r637928 = r637914 ? r637922 : r637927;
double r637929 = r637912 ? r637904 : r637928;
double r637930 = r637906 ? r637910 : r637929;
double r637931 = r637899 ? r637904 : r637930;
double r637932 = r637884 ? r637897 : r637931;
double r637933 = r637875 ? r637882 : r637932;
double r637934 = r637865 ? r637873 : r637933;
return r637934;
}



Bits error versus re



Bits error versus im
Results
if im < -1.83059393992081e+158Initial program 64.0
rmApplied flip--64.0
Simplified64.0
Taylor expanded around -inf 7.6
if -1.83059393992081e+158 < im < -1.2297103312292532e+117Initial program 20.4
rmApplied flip--21.1
Simplified20.6
rmApplied *-un-lft-identity20.6
Applied add-sqr-sqrt20.6
Applied times-frac20.6
Simplified20.6
Simplified20.4
Taylor expanded around inf 55.7
if -1.2297103312292532e+117 < im < -9.390513393497782e-96Initial program 23.1
rmApplied flip--30.0
Simplified22.5
rmApplied *-un-lft-identity22.5
Applied add-sqr-sqrt22.5
Applied times-frac22.5
Simplified22.5
Simplified22.5
rmApplied add-sqr-sqrt22.7
Applied add-sqr-sqrt22.5
Applied times-frac22.5
Applied associate-*r*22.5
if -9.390513393497782e-96 < im < 1.0325561614582738e-163 or 6.939159969879892e+19 < im < 2.580378641751245e+36Initial program 41.1
Taylor expanded around -inf 36.9
if 1.0325561614582738e-163 < im < 6.939159969879892e+19Initial program 27.6
rmApplied flip--39.4
Simplified29.8
rmApplied associate-*r/29.8
Applied sqrt-div28.4
Simplified28.4
if 2.580378641751245e+36 < im < 8.312232129912929e+97Initial program 19.4
rmApplied flip--23.8
Simplified18.6
rmApplied *-un-lft-identity18.6
Applied add-sqr-sqrt18.6
Applied times-frac18.6
Simplified18.6
Simplified18.6
rmApplied add-cube-cbrt18.7
Applied associate-*r*18.7
if 8.312232129912929e+97 < im Initial program 51.5
rmApplied flip--51.8
Simplified51.4
rmApplied *-un-lft-identity51.4
Applied add-sqr-sqrt51.4
Applied times-frac51.4
Simplified51.4
Simplified50.3
Taylor expanded around 0 11.3
Final simplification25.0
herbie shell --seed 2019170
(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)))))