0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le 1.5530054912046227 \cdot 10^{-4}:\\
\;\;\;\;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 r20705 = 0.5;
double r20706 = 2.0;
double r20707 = re;
double r20708 = r20707 * r20707;
double r20709 = im;
double r20710 = r20709 * r20709;
double r20711 = r20708 + r20710;
double r20712 = sqrt(r20711);
double r20713 = r20712 - r20707;
double r20714 = r20706 * r20713;
double r20715 = sqrt(r20714);
double r20716 = r20705 * r20715;
return r20716;
}
double f(double re, double im) {
double r20717 = re;
double r20718 = 0.00015530054912046227;
bool r20719 = r20717 <= r20718;
double r20720 = 0.5;
double r20721 = 2.0;
double r20722 = 1.0;
double r20723 = im;
double r20724 = hypot(r20717, r20723);
double r20725 = r20724 - r20717;
double r20726 = r20722 * r20725;
double r20727 = r20721 * r20726;
double r20728 = sqrt(r20727);
double r20729 = r20720 * r20728;
double r20730 = 2.0;
double r20731 = pow(r20723, r20730);
double r20732 = 0.0;
double r20733 = r20731 + r20732;
double r20734 = r20717 + r20724;
double r20735 = r20733 / r20734;
double r20736 = r20721 * r20735;
double r20737 = sqrt(r20736);
double r20738 = r20720 * r20737;
double r20739 = r20719 ? r20729 : r20738;
return r20739;
}



Bits error versus re



Bits error versus im
Results
if re < 0.00015530054912046227Initial program 32.4
rmApplied *-un-lft-identity32.4
Applied *-un-lft-identity32.4
Applied distribute-lft-out--32.4
Simplified4.8
if 0.00015530054912046227 < re Initial program 57.2
rmApplied flip--57.2
Simplified40.8
Simplified30.9
Final simplification11.3
herbie shell --seed 2020034 +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)))))