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.106642014201959 \cdot 10^{+51}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2.0} \cdot 0.5\\
\mathbf{elif}\;re \le -9.302531496239792 \cdot 10^{-250}:\\
\;\;\;\;\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 7.096848204143166 \cdot 10^{-276}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 5.548034001702293 \cdot 10^{-37}:\\
\;\;\;\;\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.0967242758656016 \cdot 10^{+173}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0\\
\end{array}double f(double re, double im) {
double r449319 = 0.5;
double r449320 = 2.0;
double r449321 = re;
double r449322 = r449321 * r449321;
double r449323 = im;
double r449324 = r449323 * r449323;
double r449325 = r449322 + r449324;
double r449326 = sqrt(r449325);
double r449327 = r449326 - r449321;
double r449328 = r449320 * r449327;
double r449329 = sqrt(r449328);
double r449330 = r449319 * r449329;
return r449330;
}
double f(double re, double im) {
double r449331 = re;
double r449332 = -3.106642014201959e+51;
bool r449333 = r449331 <= r449332;
double r449334 = -2.0;
double r449335 = r449334 * r449331;
double r449336 = 2.0;
double r449337 = r449335 * r449336;
double r449338 = sqrt(r449337);
double r449339 = 0.5;
double r449340 = r449338 * r449339;
double r449341 = -9.302531496239792e-250;
bool r449342 = r449331 <= r449341;
double r449343 = im;
double r449344 = r449343 * r449343;
double r449345 = r449331 * r449331;
double r449346 = r449344 + r449345;
double r449347 = sqrt(r449346);
double r449348 = sqrt(r449347);
double r449349 = r449348 * r449348;
double r449350 = r449349 - r449331;
double r449351 = r449336 * r449350;
double r449352 = sqrt(r449351);
double r449353 = r449352 * r449339;
double r449354 = 7.096848204143166e-276;
bool r449355 = r449331 <= r449354;
double r449356 = r449343 - r449331;
double r449357 = r449336 * r449356;
double r449358 = sqrt(r449357);
double r449359 = r449339 * r449358;
double r449360 = 5.548034001702293e-37;
bool r449361 = r449331 <= r449360;
double r449362 = 3.0967242758656016e+173;
bool r449363 = r449331 <= r449362;
double r449364 = 0.0;
double r449365 = r449363 ? r449359 : r449364;
double r449366 = r449361 ? r449353 : r449365;
double r449367 = r449355 ? r449359 : r449366;
double r449368 = r449342 ? r449353 : r449367;
double r449369 = r449333 ? r449340 : r449368;
return r449369;
}



Bits error versus re



Bits error versus im
Results
if re < -3.106642014201959e+51Initial program 42.6
Taylor expanded around -inf 11.7
if -3.106642014201959e+51 < re < -9.302531496239792e-250 or 7.096848204143166e-276 < re < 5.548034001702293e-37Initial program 25.4
rmApplied add-sqr-sqrt25.4
Applied sqrt-prod25.5
if -9.302531496239792e-250 < re < 7.096848204143166e-276 or 5.548034001702293e-37 < re < 3.0967242758656016e+173Initial program 44.1
Taylor expanded around 0 45.4
if 3.0967242758656016e+173 < re Initial program 62.3
Taylor expanded around inf 50.3
Final simplification30.3
herbie shell --seed 2019154
(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)))))