0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le 6.234036773388662816925137796587363022033 \cdot 10^{189}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(1 \cdot \left(\mathsf{hypot}\left(re, im\right) - re\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2} + 0}{re + \mathsf{hypot}\left(re, im\right)}}\\
\end{array}double f(double re, double im) {
double r30406 = 0.5;
double r30407 = 2.0;
double r30408 = re;
double r30409 = r30408 * r30408;
double r30410 = im;
double r30411 = r30410 * r30410;
double r30412 = r30409 + r30411;
double r30413 = sqrt(r30412);
double r30414 = r30413 - r30408;
double r30415 = r30407 * r30414;
double r30416 = sqrt(r30415);
double r30417 = r30406 * r30416;
return r30417;
}
double f(double re, double im) {
double r30418 = re;
double r30419 = 6.234036773388663e+189;
bool r30420 = r30418 <= r30419;
double r30421 = 0.5;
double r30422 = 2.0;
double r30423 = 1.0;
double r30424 = im;
double r30425 = hypot(r30418, r30424);
double r30426 = r30425 - r30418;
double r30427 = r30423 * r30426;
double r30428 = r30422 * r30427;
double r30429 = sqrt(r30428);
double r30430 = r30421 * r30429;
double r30431 = 2.0;
double r30432 = pow(r30424, r30431);
double r30433 = 0.0;
double r30434 = r30432 + r30433;
double r30435 = r30418 + r30425;
double r30436 = r30434 / r30435;
double r30437 = r30422 * r30436;
double r30438 = sqrt(r30437);
double r30439 = r30421 * r30438;
double r30440 = r30420 ? r30430 : r30439;
return r30440;
}



Bits error versus re



Bits error versus im
Results
if re < 6.234036773388663e+189Initial program 35.9
rmApplied *-un-lft-identity35.9
Applied *-un-lft-identity35.9
Applied distribute-lft-out--35.9
Simplified9.7
if 6.234036773388663e+189 < re Initial program 64.0
rmApplied flip--64.0
Simplified50.6
Simplified32.6
Final simplification11.9
herbie shell --seed 2019354 +o rules:numerics
(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)))))