0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -7.76046808581119742207882133243897814791 \cdot 10^{47}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -5.899676996224969797473356094348485392996 \cdot 10^{-185}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;re \le -2.648694287528554075771729853998939215804 \cdot 10^{-263}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le -1.811389298153715552045406905668607348984 \cdot 10^{-301}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;re \le 2.110613024816268606126864582999880133873 \cdot 10^{-296}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 2.35019253067102216238367022296457508887 \cdot 10^{-249}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;re \le 7.63604689507411636163851884560784658093 \cdot 10^{-234}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 2.272841479640385108783928267801312364768 \cdot 10^{138}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{\sqrt{2}} \cdot \left(\sqrt{\sqrt{2}} \cdot \left|\frac{\left|im\right|}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\right|\right)\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left|\frac{\left|im\right|}{\sqrt{re + re}}\right|\right)\\
\end{array}double f(double re, double im) {
double r27374 = 0.5;
double r27375 = 2.0;
double r27376 = re;
double r27377 = r27376 * r27376;
double r27378 = im;
double r27379 = r27378 * r27378;
double r27380 = r27377 + r27379;
double r27381 = sqrt(r27380);
double r27382 = r27381 - r27376;
double r27383 = r27375 * r27382;
double r27384 = sqrt(r27383);
double r27385 = r27374 * r27384;
return r27385;
}
double f(double re, double im) {
double r27386 = re;
double r27387 = -7.760468085811197e+47;
bool r27388 = r27386 <= r27387;
double r27389 = 0.5;
double r27390 = 2.0;
double r27391 = -2.0;
double r27392 = r27391 * r27386;
double r27393 = r27390 * r27392;
double r27394 = sqrt(r27393);
double r27395 = r27389 * r27394;
double r27396 = -5.89967699622497e-185;
bool r27397 = r27386 <= r27396;
double r27398 = r27386 * r27386;
double r27399 = im;
double r27400 = r27399 * r27399;
double r27401 = r27398 + r27400;
double r27402 = sqrt(r27401);
double r27403 = sqrt(r27402);
double r27404 = r27403 * r27403;
double r27405 = r27404 - r27386;
double r27406 = r27390 * r27405;
double r27407 = sqrt(r27406);
double r27408 = r27389 * r27407;
double r27409 = -2.648694287528554e-263;
bool r27410 = r27386 <= r27409;
double r27411 = r27399 - r27386;
double r27412 = r27390 * r27411;
double r27413 = sqrt(r27412);
double r27414 = r27389 * r27413;
double r27415 = -1.8113892981537156e-301;
bool r27416 = r27386 <= r27415;
double r27417 = r27386 + r27399;
double r27418 = -r27417;
double r27419 = r27390 * r27418;
double r27420 = sqrt(r27419);
double r27421 = r27389 * r27420;
double r27422 = 2.1106130248162686e-296;
bool r27423 = r27386 <= r27422;
double r27424 = 2.350192530671022e-249;
bool r27425 = r27386 <= r27424;
double r27426 = 7.636046895074116e-234;
bool r27427 = r27386 <= r27426;
double r27428 = 2.272841479640385e+138;
bool r27429 = r27386 <= r27428;
double r27430 = sqrt(r27390);
double r27431 = sqrt(r27430);
double r27432 = fabs(r27399);
double r27433 = r27402 + r27386;
double r27434 = sqrt(r27433);
double r27435 = r27432 / r27434;
double r27436 = fabs(r27435);
double r27437 = r27431 * r27436;
double r27438 = r27431 * r27437;
double r27439 = r27389 * r27438;
double r27440 = r27386 + r27386;
double r27441 = sqrt(r27440);
double r27442 = r27432 / r27441;
double r27443 = fabs(r27442);
double r27444 = r27430 * r27443;
double r27445 = r27389 * r27444;
double r27446 = r27429 ? r27439 : r27445;
double r27447 = r27427 ? r27414 : r27446;
double r27448 = r27425 ? r27421 : r27447;
double r27449 = r27423 ? r27414 : r27448;
double r27450 = r27416 ? r27421 : r27449;
double r27451 = r27410 ? r27414 : r27450;
double r27452 = r27397 ? r27408 : r27451;
double r27453 = r27388 ? r27395 : r27452;
return r27453;
}



Bits error versus re



Bits error versus im
Results
if re < -7.760468085811197e+47Initial program 44.8
Taylor expanded around -inf 12.8
if -7.760468085811197e+47 < re < -5.89967699622497e-185Initial program 17.6
rmApplied add-sqr-sqrt17.6
Applied sqrt-prod17.7
if -5.89967699622497e-185 < re < -2.648694287528554e-263 or -1.8113892981537156e-301 < re < 2.1106130248162686e-296 or 2.350192530671022e-249 < re < 7.636046895074116e-234Initial program 29.5
Taylor expanded around 0 33.5
if -2.648694287528554e-263 < re < -1.8113892981537156e-301 or 2.1106130248162686e-296 < re < 2.350192530671022e-249Initial program 31.0
rmApplied flip--31.2
Simplified31.2
Taylor expanded around -inf 34.1
if 7.636046895074116e-234 < re < 2.272841479640385e+138Initial program 41.8
rmApplied flip--41.7
Simplified31.4
rmApplied add-sqr-sqrt31.5
Applied add-sqr-sqrt31.5
Applied times-frac31.5
Simplified31.5
Simplified29.1
rmApplied sqrt-prod29.2
Simplified18.6
rmApplied add-sqr-sqrt18.6
Applied sqrt-prod18.6
Applied associate-*l*18.6
if 2.272841479640385e+138 < re Initial program 62.9
rmApplied flip--62.9
Simplified48.9
rmApplied add-sqr-sqrt48.9
Applied add-sqr-sqrt48.9
Applied times-frac48.9
Simplified48.9
Simplified48.5
rmApplied sqrt-prod48.5
Simplified46.9
Taylor expanded around inf 8.1
Final simplification18.2
herbie shell --seed 2019318
(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)))))