0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -9.534169287773102 \cdot 10^{+132}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\
\mathbf{elif}\;re \le -1.7322803508780655 \cdot 10^{-249}:\\
\;\;\;\;\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 1.0730314248253915 \cdot 10^{-288}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 2.2094180720166524 \cdot 10^{+111}:\\
\;\;\;\;0.5 \cdot \left(\left|im\right| \cdot \sqrt{\frac{2.0}{\sqrt{im \cdot im + re \cdot re} + re}}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{\sqrt{2.0}}{\sqrt{re + re}} \cdot \left|im\right|\right) \cdot 0.5\\
\end{array}double f(double re, double im) {
double r917138 = 0.5;
double r917139 = 2.0;
double r917140 = re;
double r917141 = r917140 * r917140;
double r917142 = im;
double r917143 = r917142 * r917142;
double r917144 = r917141 + r917143;
double r917145 = sqrt(r917144);
double r917146 = r917145 - r917140;
double r917147 = r917139 * r917146;
double r917148 = sqrt(r917147);
double r917149 = r917138 * r917148;
return r917149;
}
double f(double re, double im) {
double r917150 = re;
double r917151 = -9.534169287773102e+132;
bool r917152 = r917150 <= r917151;
double r917153 = -2.0;
double r917154 = r917153 * r917150;
double r917155 = 2.0;
double r917156 = r917154 * r917155;
double r917157 = sqrt(r917156);
double r917158 = 0.5;
double r917159 = r917157 * r917158;
double r917160 = -1.7322803508780655e-249;
bool r917161 = r917150 <= r917160;
double r917162 = im;
double r917163 = r917162 * r917162;
double r917164 = r917150 * r917150;
double r917165 = r917163 + r917164;
double r917166 = sqrt(r917165);
double r917167 = sqrt(r917166);
double r917168 = r917167 * r917167;
double r917169 = r917168 - r917150;
double r917170 = r917155 * r917169;
double r917171 = sqrt(r917170);
double r917172 = r917171 * r917158;
double r917173 = 1.0730314248253915e-288;
bool r917174 = r917150 <= r917173;
double r917175 = r917162 - r917150;
double r917176 = r917155 * r917175;
double r917177 = sqrt(r917176);
double r917178 = r917158 * r917177;
double r917179 = 2.2094180720166524e+111;
bool r917180 = r917150 <= r917179;
double r917181 = fabs(r917162);
double r917182 = r917166 + r917150;
double r917183 = r917155 / r917182;
double r917184 = sqrt(r917183);
double r917185 = r917181 * r917184;
double r917186 = r917158 * r917185;
double r917187 = sqrt(r917155);
double r917188 = r917150 + r917150;
double r917189 = sqrt(r917188);
double r917190 = r917187 / r917189;
double r917191 = r917190 * r917181;
double r917192 = r917191 * r917158;
double r917193 = r917180 ? r917186 : r917192;
double r917194 = r917174 ? r917178 : r917193;
double r917195 = r917161 ? r917172 : r917194;
double r917196 = r917152 ? r917159 : r917195;
return r917196;
}



Bits error versus re



Bits error versus im
Results
if re < -9.534169287773102e+132Initial program 56.0
Taylor expanded around -inf 9.5
if -9.534169287773102e+132 < re < -1.7322803508780655e-249Initial program 17.9
rmApplied add-sqr-sqrt18.0
if -1.7322803508780655e-249 < re < 1.0730314248253915e-288Initial program 29.5
rmApplied add-sqr-sqrt29.6
Taylor expanded around 0 29.4
if 1.0730314248253915e-288 < re < 2.2094180720166524e+111Initial program 38.1
rmApplied flip--38.0
Applied associate-*r/38.0
Applied sqrt-div38.1
Simplified29.3
rmApplied *-un-lft-identity29.3
Applied sqrt-prod29.3
Applied times-frac29.3
Simplified20.0
rmApplied sqrt-undiv19.9
if 2.2094180720166524e+111 < re Initial program 60.1
rmApplied flip--60.2
Applied associate-*r/60.2
Applied sqrt-div60.2
Simplified44.3
rmApplied *-un-lft-identity44.3
Applied sqrt-prod44.3
Applied times-frac44.3
Simplified42.1
Taylor expanded around inf 10.2
Final simplification16.8
herbie shell --seed 2019137
(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)))))