0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -8.246467589308017 \cdot 10^{-100}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot im}{re + \sqrt{im \cdot im + re \cdot re}} \cdot 2.0}\\
\mathbf{elif}\;im \le 3.296358508150943 \cdot 10^{-157}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(re \cdot -2\right)} \cdot 0.5\\
\mathbf{elif}\;im \le 2.3144170619582434 \cdot 10^{+116}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(\left(\sqrt[3]{\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re} \cdot \sqrt[3]{\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re}\right) \cdot \sqrt[3]{\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re}\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(im - re\right) \cdot 2.0}\\
\end{array}double f(double re, double im) {
double r495278 = 0.5;
double r495279 = 2.0;
double r495280 = re;
double r495281 = r495280 * r495280;
double r495282 = im;
double r495283 = r495282 * r495282;
double r495284 = r495281 + r495283;
double r495285 = sqrt(r495284);
double r495286 = r495285 - r495280;
double r495287 = r495279 * r495286;
double r495288 = sqrt(r495287);
double r495289 = r495278 * r495288;
return r495289;
}
double f(double re, double im) {
double r495290 = im;
double r495291 = -8.246467589308017e-100;
bool r495292 = r495290 <= r495291;
double r495293 = 0.5;
double r495294 = r495290 * r495290;
double r495295 = re;
double r495296 = r495295 * r495295;
double r495297 = r495294 + r495296;
double r495298 = sqrt(r495297);
double r495299 = r495295 + r495298;
double r495300 = r495294 / r495299;
double r495301 = 2.0;
double r495302 = r495300 * r495301;
double r495303 = sqrt(r495302);
double r495304 = r495293 * r495303;
double r495305 = 3.296358508150943e-157;
bool r495306 = r495290 <= r495305;
double r495307 = -2.0;
double r495308 = r495295 * r495307;
double r495309 = r495301 * r495308;
double r495310 = sqrt(r495309);
double r495311 = r495310 * r495293;
double r495312 = 2.3144170619582434e+116;
bool r495313 = r495290 <= r495312;
double r495314 = sqrt(r495298);
double r495315 = r495314 * r495314;
double r495316 = r495315 - r495295;
double r495317 = cbrt(r495316);
double r495318 = r495317 * r495317;
double r495319 = r495318 * r495317;
double r495320 = r495301 * r495319;
double r495321 = sqrt(r495320);
double r495322 = r495293 * r495321;
double r495323 = r495290 - r495295;
double r495324 = r495323 * r495301;
double r495325 = sqrt(r495324);
double r495326 = r495293 * r495325;
double r495327 = r495313 ? r495322 : r495326;
double r495328 = r495306 ? r495311 : r495327;
double r495329 = r495292 ? r495304 : r495328;
return r495329;
}



Bits error versus re



Bits error versus im
Results
if im < -8.246467589308017e-100Initial program 36.4
rmApplied add-sqr-sqrt36.4
Applied sqrt-prod36.5
rmApplied flip--40.1
Simplified37.0
Simplified37.0
if -8.246467589308017e-100 < im < 3.296358508150943e-157Initial program 41.0
Taylor expanded around -inf 35.7
if 3.296358508150943e-157 < im < 2.3144170619582434e+116Initial program 24.1
rmApplied add-sqr-sqrt24.1
Applied sqrt-prod24.2
rmApplied add-cube-cbrt24.6
if 2.3144170619582434e+116 < im Initial program 53.0
Taylor expanded around 0 9.3
Final simplification29.6
herbie shell --seed 2019130
(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)))))