0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.980267520528827579962452667551640625594 \cdot 10^{108}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;re \le -9.566365453995885312129846183313491609438 \cdot 10^{-295}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{elif}\;re \le 2.488831011052814504029106273604114956723 \cdot 10^{128}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} + re}{im}}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{re + re}}\\
\end{array}double f(double re, double im) {
double r17333 = 0.5;
double r17334 = 2.0;
double r17335 = re;
double r17336 = r17335 * r17335;
double r17337 = im;
double r17338 = r17337 * r17337;
double r17339 = r17336 + r17338;
double r17340 = sqrt(r17339);
double r17341 = r17340 - r17335;
double r17342 = r17334 * r17341;
double r17343 = sqrt(r17342);
double r17344 = r17333 * r17343;
return r17344;
}
double f(double re, double im) {
double r17345 = re;
double r17346 = -1.9802675205288276e+108;
bool r17347 = r17345 <= r17346;
double r17348 = 0.5;
double r17349 = 2.0;
double r17350 = -1.0;
double r17351 = r17350 * r17345;
double r17352 = r17351 - r17345;
double r17353 = r17349 * r17352;
double r17354 = sqrt(r17353);
double r17355 = r17348 * r17354;
double r17356 = -9.566365453995885e-295;
bool r17357 = r17345 <= r17356;
double r17358 = r17345 * r17345;
double r17359 = im;
double r17360 = r17359 * r17359;
double r17361 = r17358 + r17360;
double r17362 = sqrt(r17361);
double r17363 = r17362 - r17345;
double r17364 = r17349 * r17363;
double r17365 = sqrt(r17364);
double r17366 = r17348 * r17365;
double r17367 = 2.4888310110528145e+128;
bool r17368 = r17345 <= r17367;
double r17369 = r17362 + r17345;
double r17370 = r17369 / r17359;
double r17371 = r17359 / r17370;
double r17372 = r17349 * r17371;
double r17373 = sqrt(r17372);
double r17374 = r17348 * r17373;
double r17375 = 2.0;
double r17376 = pow(r17359, r17375);
double r17377 = r17345 + r17345;
double r17378 = r17376 / r17377;
double r17379 = r17349 * r17378;
double r17380 = sqrt(r17379);
double r17381 = r17348 * r17380;
double r17382 = r17368 ? r17374 : r17381;
double r17383 = r17357 ? r17366 : r17382;
double r17384 = r17347 ? r17355 : r17383;
return r17384;
}



Bits error versus re



Bits error versus im
Results
if re < -1.9802675205288276e+108Initial program 52.1
Taylor expanded around -inf 9.9
if -1.9802675205288276e+108 < re < -9.566365453995885e-295Initial program 20.0
if -9.566365453995885e-295 < re < 2.4888310110528145e+128Initial program 38.4
rmApplied flip--38.3
Simplified30.7
rmApplied unpow230.7
Applied associate-/l*28.5
if 2.4888310110528145e+128 < re Initial program 62.5
rmApplied flip--62.5
Simplified47.8
Taylor expanded around inf 31.1
Final simplification23.2
herbie shell --seed 2019356
(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)))))