0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -2.68746212174275753 \cdot 10^{-4}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le -8.1662811043924325 \cdot 10^{-156}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im \cdot \frac{im}{\sqrt{re \cdot re + im \cdot im} + re}\right)}\\
\mathbf{elif}\;im \le -1.1627508036807946 \cdot 10^{-191}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;im \le 2.64585070076375456 \cdot 10^{-217}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;im \le 1.55592959088565444 \cdot 10^{-167}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{1}}{\frac{re + im}{im}}}\\
\mathbf{elif}\;im \le 4.5008281787475699 \cdot 10^{-108}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;im \le 4.009215390964791 \cdot 10^{62}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {im}^{1}}}{\sqrt{\frac{\sqrt{re \cdot re + im \cdot im} + re}{im}}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{1}}{\frac{re + im}{im}}}\\
\end{array}double f(double re, double im) {
double r22295 = 0.5;
double r22296 = 2.0;
double r22297 = re;
double r22298 = r22297 * r22297;
double r22299 = im;
double r22300 = r22299 * r22299;
double r22301 = r22298 + r22300;
double r22302 = sqrt(r22301);
double r22303 = r22302 - r22297;
double r22304 = r22296 * r22303;
double r22305 = sqrt(r22304);
double r22306 = r22295 * r22305;
return r22306;
}
double f(double re, double im) {
double r22307 = im;
double r22308 = -0.00026874621217427575;
bool r22309 = r22307 <= r22308;
double r22310 = 0.5;
double r22311 = 2.0;
double r22312 = re;
double r22313 = r22312 + r22307;
double r22314 = -r22313;
double r22315 = r22311 * r22314;
double r22316 = sqrt(r22315);
double r22317 = r22310 * r22316;
double r22318 = -8.166281104392432e-156;
bool r22319 = r22307 <= r22318;
double r22320 = r22312 * r22312;
double r22321 = r22307 * r22307;
double r22322 = r22320 + r22321;
double r22323 = sqrt(r22322);
double r22324 = r22323 + r22312;
double r22325 = r22307 / r22324;
double r22326 = r22307 * r22325;
double r22327 = r22311 * r22326;
double r22328 = sqrt(r22327);
double r22329 = r22310 * r22328;
double r22330 = -1.1627508036807946e-191;
bool r22331 = r22307 <= r22330;
double r22332 = 2.6458507007637546e-217;
bool r22333 = r22307 <= r22332;
double r22334 = -1.0;
double r22335 = r22334 * r22312;
double r22336 = r22335 - r22312;
double r22337 = r22311 * r22336;
double r22338 = sqrt(r22337);
double r22339 = r22310 * r22338;
double r22340 = 1.5559295908856544e-167;
bool r22341 = r22307 <= r22340;
double r22342 = 1.0;
double r22343 = pow(r22307, r22342);
double r22344 = r22313 / r22307;
double r22345 = r22343 / r22344;
double r22346 = r22311 * r22345;
double r22347 = sqrt(r22346);
double r22348 = r22310 * r22347;
double r22349 = 4.50082817874757e-108;
bool r22350 = r22307 <= r22349;
double r22351 = 4.0092153909647915e+62;
bool r22352 = r22307 <= r22351;
double r22353 = r22311 * r22343;
double r22354 = sqrt(r22353);
double r22355 = r22324 / r22307;
double r22356 = sqrt(r22355);
double r22357 = r22354 / r22356;
double r22358 = r22310 * r22357;
double r22359 = r22352 ? r22358 : r22348;
double r22360 = r22350 ? r22339 : r22359;
double r22361 = r22341 ? r22348 : r22360;
double r22362 = r22333 ? r22339 : r22361;
double r22363 = r22331 ? r22317 : r22362;
double r22364 = r22319 ? r22329 : r22363;
double r22365 = r22309 ? r22317 : r22364;
return r22365;
}



Bits error versus re



Bits error versus im
Results
if im < -0.00026874621217427575 or -8.166281104392432e-156 < im < -1.1627508036807946e-191Initial program 41.9
rmApplied flip--45.8
Simplified43.3
Taylor expanded around -inf 18.7
if -0.00026874621217427575 < im < -8.166281104392432e-156Initial program 27.0
rmApplied flip--39.7
Simplified29.8
rmApplied *-un-lft-identity29.8
Applied add-sqr-sqrt64.0
Applied unpow-prod-down64.0
Applied times-frac64.0
Simplified64.0
Simplified29.8
if -1.1627508036807946e-191 < im < 2.6458507007637546e-217 or 1.5559295908856544e-167 < im < 4.50082817874757e-108Initial program 39.1
Taylor expanded around -inf 34.1
if 2.6458507007637546e-217 < im < 1.5559295908856544e-167 or 4.0092153909647915e+62 < im Initial program 47.8
rmApplied flip--51.1
Simplified50.0
rmApplied sqr-pow50.0
Applied associate-/l*48.5
Simplified48.5
Taylor expanded around 0 17.2
if 4.50082817874757e-108 < im < 4.0092153909647915e+62Initial program 25.3
rmApplied flip--35.1
Simplified26.1
rmApplied sqr-pow26.1
Applied associate-/l*26.1
Simplified26.1
rmApplied associate-*r/26.1
Applied sqrt-div26.0
Simplified26.0
Final simplification24.1
herbie shell --seed 2020020
(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)))))