0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -9.735645360863155 \cdot 10^{-247}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2.0}\\
\mathbf{elif}\;im \le 1.1260714228031905 \cdot 10^{-171}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\
\mathbf{elif}\;im \le 1.7084160018085855 \cdot 10^{+61}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\left(\sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re} \cdot \sqrt[3]{im \cdot im + re \cdot re}}}\right) \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} - re\right) \cdot 2.0}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(im - re\right)} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r872299 = 0.5;
double r872300 = 2.0;
double r872301 = re;
double r872302 = r872301 * r872301;
double r872303 = im;
double r872304 = r872303 * r872303;
double r872305 = r872302 + r872304;
double r872306 = sqrt(r872305);
double r872307 = r872306 - r872301;
double r872308 = r872300 * r872307;
double r872309 = sqrt(r872308);
double r872310 = r872299 * r872309;
return r872310;
}
double f(double re, double im) {
double r872311 = im;
double r872312 = -9.735645360863155e-247;
bool r872313 = r872311 <= r872312;
double r872314 = 0.5;
double r872315 = r872311 * r872311;
double r872316 = re;
double r872317 = r872316 * r872316;
double r872318 = r872315 + r872317;
double r872319 = sqrt(r872318);
double r872320 = r872316 + r872319;
double r872321 = r872315 / r872320;
double r872322 = 2.0;
double r872323 = r872321 * r872322;
double r872324 = sqrt(r872323);
double r872325 = r872314 * r872324;
double r872326 = 1.1260714228031905e-171;
bool r872327 = r872311 <= r872326;
double r872328 = -2.0;
double r872329 = r872316 * r872328;
double r872330 = r872322 * r872329;
double r872331 = sqrt(r872330);
double r872332 = r872331 * r872314;
double r872333 = 1.7084160018085855e+61;
bool r872334 = r872311 <= r872333;
double r872335 = cbrt(r872318);
double r872336 = r872335 * r872335;
double r872337 = sqrt(r872336);
double r872338 = sqrt(r872335);
double r872339 = r872337 * r872338;
double r872340 = sqrt(r872339);
double r872341 = sqrt(r872337);
double r872342 = r872340 * r872341;
double r872343 = sqrt(r872338);
double r872344 = r872342 * r872343;
double r872345 = r872344 - r872316;
double r872346 = r872345 * r872322;
double r872347 = sqrt(r872346);
double r872348 = r872314 * r872347;
double r872349 = r872311 - r872316;
double r872350 = r872322 * r872349;
double r872351 = sqrt(r872350);
double r872352 = r872351 * r872314;
double r872353 = r872334 ? r872348 : r872352;
double r872354 = r872327 ? r872332 : r872353;
double r872355 = r872313 ? r872325 : r872354;
return r872355;
}



Bits error versus re



Bits error versus im
Results
if im < -9.735645360863155e-247Initial program 36.8
rmApplied add-sqr-sqrt36.8
Applied sqrt-prod36.8
rmApplied flip--43.1
Simplified39.3
Simplified39.3
if -9.735645360863155e-247 < im < 1.1260714228031905e-171Initial program 41.8
Taylor expanded around -inf 33.8
if 1.1260714228031905e-171 < im < 1.7084160018085855e+61Initial program 24.9
rmApplied add-sqr-sqrt24.9
Applied sqrt-prod25.0
rmApplied add-cube-cbrt25.1
Applied sqrt-prod25.1
Applied sqrt-prod25.1
Applied associate-*r*25.1
rmApplied add-cube-cbrt25.2
Applied sqrt-prod25.2
if 1.7084160018085855e+61 < im Initial program 44.3
Taylor expanded around 0 11.0
Final simplification30.0
herbie shell --seed 2019158
(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)))))