0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -2.502374243691867342237503607268776845296 \cdot 10^{151}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le -5.246119333473003277498362100151355132534 \cdot 10^{-164}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\
\mathbf{elif}\;im \le 1.575660648688742108488246116440489634012 \cdot 10^{-78}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 9.185171752674521661253698648574080044683 \cdot 10^{153}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{re + \sqrt{re \cdot re + im \cdot im}}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r24931 = 0.5;
double r24932 = 2.0;
double r24933 = re;
double r24934 = r24933 * r24933;
double r24935 = im;
double r24936 = r24935 * r24935;
double r24937 = r24934 + r24936;
double r24938 = sqrt(r24937);
double r24939 = r24938 - r24933;
double r24940 = r24932 * r24939;
double r24941 = sqrt(r24940);
double r24942 = r24931 * r24941;
return r24942;
}
double f(double re, double im) {
double r24943 = im;
double r24944 = -2.5023742436918673e+151;
bool r24945 = r24943 <= r24944;
double r24946 = 0.5;
double r24947 = 2.0;
double r24948 = re;
double r24949 = r24948 + r24943;
double r24950 = -r24949;
double r24951 = r24947 * r24950;
double r24952 = sqrt(r24951);
double r24953 = r24946 * r24952;
double r24954 = -5.246119333473003e-164;
bool r24955 = r24943 <= r24954;
double r24956 = 2.0;
double r24957 = pow(r24943, r24956);
double r24958 = r24947 * r24957;
double r24959 = sqrt(r24958);
double r24960 = r24948 * r24948;
double r24961 = r24943 * r24943;
double r24962 = r24960 + r24961;
double r24963 = sqrt(r24962);
double r24964 = r24948 + r24963;
double r24965 = sqrt(r24964);
double r24966 = r24959 / r24965;
double r24967 = r24946 * r24966;
double r24968 = 1.575660648688742e-78;
bool r24969 = r24943 <= r24968;
double r24970 = -2.0;
double r24971 = r24970 * r24948;
double r24972 = r24947 * r24971;
double r24973 = sqrt(r24972);
double r24974 = r24946 * r24973;
double r24975 = 9.185171752674522e+153;
bool r24976 = r24943 <= r24975;
double r24977 = r24943 - r24948;
double r24978 = r24947 * r24977;
double r24979 = sqrt(r24978);
double r24980 = r24946 * r24979;
double r24981 = r24976 ? r24967 : r24980;
double r24982 = r24969 ? r24974 : r24981;
double r24983 = r24955 ? r24967 : r24982;
double r24984 = r24945 ? r24953 : r24983;
return r24984;
}



Bits error versus re



Bits error versus im
Results
if im < -2.5023742436918673e+151Initial program 63.3
rmApplied flip--63.3
Simplified63.2
Simplified63.2
Taylor expanded around -inf 7.9
if -2.5023742436918673e+151 < im < -5.246119333473003e-164 or 1.575660648688742e-78 < im < 9.185171752674522e+153Initial program 23.9
rmApplied flip--30.4
Simplified23.8
Simplified23.8
rmApplied associate-*r/23.8
Applied sqrt-div23.5
if -5.246119333473003e-164 < im < 1.575660648688742e-78Initial program 39.8
Taylor expanded around -inf 35.7
if 9.185171752674522e+153 < im Initial program 64.0
Taylor expanded around 0 7.6
Final simplification23.2
herbie shell --seed 2019294
(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)))))