0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -3.4169040822526505 \cdot 10^{+151}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\
\mathbf{elif}\;re \le -3.862148986123479 \cdot 10^{-264}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right)} \cdot 0.5\\
\mathbf{elif}\;re \le 3.3402689576194064 \cdot 10^{+144}:\\
\;\;\;\;\frac{\sqrt{2.0}}{\frac{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}}{\left|im\right|}} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{re + re}} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r938086 = 0.5;
double r938087 = 2.0;
double r938088 = re;
double r938089 = r938088 * r938088;
double r938090 = im;
double r938091 = r938090 * r938090;
double r938092 = r938089 + r938091;
double r938093 = sqrt(r938092);
double r938094 = r938093 - r938088;
double r938095 = r938087 * r938094;
double r938096 = sqrt(r938095);
double r938097 = r938086 * r938096;
return r938097;
}
double f(double re, double im) {
double r938098 = re;
double r938099 = -3.4169040822526505e+151;
bool r938100 = r938098 <= r938099;
double r938101 = -2.0;
double r938102 = r938101 * r938098;
double r938103 = 2.0;
double r938104 = r938102 * r938103;
double r938105 = sqrt(r938104);
double r938106 = 0.5;
double r938107 = r938105 * r938106;
double r938108 = -3.862148986123479e-264;
bool r938109 = r938098 <= r938108;
double r938110 = im;
double r938111 = r938110 * r938110;
double r938112 = r938098 * r938098;
double r938113 = r938111 + r938112;
double r938114 = sqrt(r938113);
double r938115 = sqrt(r938114);
double r938116 = r938115 * r938115;
double r938117 = r938116 - r938098;
double r938118 = r938103 * r938117;
double r938119 = sqrt(r938118);
double r938120 = r938119 * r938106;
double r938121 = 3.3402689576194064e+144;
bool r938122 = r938098 <= r938121;
double r938123 = sqrt(r938103);
double r938124 = r938114 + r938098;
double r938125 = sqrt(r938124);
double r938126 = fabs(r938110);
double r938127 = r938125 / r938126;
double r938128 = r938123 / r938127;
double r938129 = r938128 * r938106;
double r938130 = r938111 * r938103;
double r938131 = sqrt(r938130);
double r938132 = r938098 + r938098;
double r938133 = sqrt(r938132);
double r938134 = r938131 / r938133;
double r938135 = r938134 * r938106;
double r938136 = r938122 ? r938129 : r938135;
double r938137 = r938109 ? r938120 : r938136;
double r938138 = r938100 ? r938107 : r938137;
return r938138;
}



Bits error versus re



Bits error versus im
Results
if re < -3.4169040822526505e+151Initial program 63.2
Taylor expanded around -inf 8.8
if -3.4169040822526505e+151 < re < -3.862148986123479e-264Initial program 19.3
rmApplied add-sqr-sqrt19.3
Applied sqrt-prod19.4
if -3.862148986123479e-264 < re < 3.3402689576194064e+144Initial program 38.1
rmApplied flip--38.0
Applied associate-*r/38.0
Applied sqrt-div38.2
Simplified29.4
rmApplied sqrt-prod29.4
Applied associate-/l*29.4
Simplified21.3
if 3.3402689576194064e+144 < re Initial program 63.6
rmApplied flip--63.6
Applied associate-*r/63.6
Applied sqrt-div63.6
Simplified49.3
Taylor expanded around inf 22.6
Final simplification19.2
herbie shell --seed 2019165
(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)))))