0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le 2.560862901069890731415987081111409855856 \cdot 10^{-149} \lor \neg \left(im \le 3.397001256475981463378846207534479575034 \cdot 10^{-102} \lor \neg \left(im \le 2.364199536335591838764361265118075567856 \cdot 10^{-26} \lor \neg \left(im \le 1.296068772043280593897223181133688304643 \cdot 10^{60}\right)\right)\right):\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\mathsf{hypot}\left(re, im\right) - re\right) + 0\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 r22490 = 0.5;
double r22491 = 2.0;
double r22492 = re;
double r22493 = r22492 * r22492;
double r22494 = im;
double r22495 = r22494 * r22494;
double r22496 = r22493 + r22495;
double r22497 = sqrt(r22496);
double r22498 = r22497 - r22492;
double r22499 = r22491 * r22498;
double r22500 = sqrt(r22499);
double r22501 = r22490 * r22500;
return r22501;
}
double f(double re, double im) {
double r22502 = im;
double r22503 = 2.5608629010698907e-149;
bool r22504 = r22502 <= r22503;
double r22505 = 3.3970012564759815e-102;
bool r22506 = r22502 <= r22505;
double r22507 = 2.3641995363355918e-26;
bool r22508 = r22502 <= r22507;
double r22509 = 1.2960687720432806e+60;
bool r22510 = r22502 <= r22509;
double r22511 = !r22510;
bool r22512 = r22508 || r22511;
double r22513 = !r22512;
bool r22514 = r22506 || r22513;
double r22515 = !r22514;
bool r22516 = r22504 || r22515;
double r22517 = 0.5;
double r22518 = 2.0;
double r22519 = re;
double r22520 = hypot(r22519, r22502);
double r22521 = r22520 - r22519;
double r22522 = 0.0;
double r22523 = r22521 + r22522;
double r22524 = r22518 * r22523;
double r22525 = sqrt(r22524);
double r22526 = r22517 * r22525;
double r22527 = 2.0;
double r22528 = pow(r22502, r22527);
double r22529 = r22528 + r22522;
double r22530 = r22519 + r22520;
double r22531 = r22529 / r22530;
double r22532 = r22518 * r22531;
double r22533 = sqrt(r22532);
double r22534 = r22517 * r22533;
double r22535 = r22516 ? r22526 : r22534;
return r22535;
}



Bits error versus re



Bits error versus im
Results
if im < 2.5608629010698907e-149 or 3.3970012564759815e-102 < im < 2.3641995363355918e-26 or 1.2960687720432806e+60 < im Initial program 40.2
rmApplied add-cube-cbrt40.8
Applied add-sqr-sqrt40.8
Applied sqrt-prod40.9
Applied prod-diff41.0
Simplified15.6
Simplified13.2
if 2.5608629010698907e-149 < im < 3.3970012564759815e-102 or 2.3641995363355918e-26 < im < 1.2960687720432806e+60Initial program 23.7
rmApplied flip--34.1
Simplified25.6
Simplified21.3
Final simplification14.1
herbie shell --seed 2019346 +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)))))