0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.9126520588893617 \cdot 10^{+89}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\
\mathbf{elif}\;re \le -8.269885248202767 \cdot 10^{-244}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\
\mathbf{elif}\;re \le 1.3559823755120713 \cdot 10^{-164}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\
\mathbf{elif}\;re \le 1.7047961881634492 \cdot 10^{-13}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)}\\
\mathbf{elif}\;re \le 1.203926899582945 \cdot 10^{+51}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\
\mathbf{else}:\\
\;\;\;\;0\\
\end{array}double f(double re, double im) {
double r888900 = 0.5;
double r888901 = 2.0;
double r888902 = re;
double r888903 = r888902 * r888902;
double r888904 = im;
double r888905 = r888904 * r888904;
double r888906 = r888903 + r888905;
double r888907 = sqrt(r888906);
double r888908 = r888907 - r888902;
double r888909 = r888901 * r888908;
double r888910 = sqrt(r888909);
double r888911 = r888900 * r888910;
return r888911;
}
double f(double re, double im) {
double r888912 = re;
double r888913 = -1.9126520588893617e+89;
bool r888914 = r888912 <= r888913;
double r888915 = -2.0;
double r888916 = r888915 * r888912;
double r888917 = 2.0;
double r888918 = r888916 * r888917;
double r888919 = sqrt(r888918);
double r888920 = 0.5;
double r888921 = r888919 * r888920;
double r888922 = -8.269885248202767e-244;
bool r888923 = r888912 <= r888922;
double r888924 = im;
double r888925 = r888924 * r888924;
double r888926 = r888912 * r888912;
double r888927 = r888925 + r888926;
double r888928 = sqrt(r888927);
double r888929 = r888928 - r888912;
double r888930 = r888917 * r888929;
double r888931 = sqrt(r888930);
double r888932 = r888920 * r888931;
double r888933 = 1.3559823755120713e-164;
bool r888934 = r888912 <= r888933;
double r888935 = r888924 - r888912;
double r888936 = r888935 * r888917;
double r888937 = sqrt(r888936);
double r888938 = r888920 * r888937;
double r888939 = 1.7047961881634492e-13;
bool r888940 = r888912 <= r888939;
double r888941 = 1.203926899582945e+51;
bool r888942 = r888912 <= r888941;
double r888943 = 0.0;
double r888944 = r888942 ? r888938 : r888943;
double r888945 = r888940 ? r888932 : r888944;
double r888946 = r888934 ? r888938 : r888945;
double r888947 = r888923 ? r888932 : r888946;
double r888948 = r888914 ? r888921 : r888947;
return r888948;
}



Bits error versus re



Bits error versus im
Results
if re < -1.9126520588893617e+89Initial program 47.6
rmApplied add-sqr-sqrt47.6
rmApplied add-sqr-sqrt47.6
Applied sqrt-prod47.6
Applied associate-*l*47.6
Taylor expanded around -inf 10.8
if -1.9126520588893617e+89 < re < -8.269885248202767e-244 or 1.3559823755120713e-164 < re < 1.7047961881634492e-13Initial program 24.8
if -8.269885248202767e-244 < re < 1.3559823755120713e-164 or 1.7047961881634492e-13 < re < 1.203926899582945e+51Initial program 33.7
Taylor expanded around 0 38.1
if 1.203926899582945e+51 < re Initial program 58.3
Taylor expanded around inf 53.4
Final simplification31.4
herbie shell --seed 2019120
(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)))))