0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le 1.07408121477840674 \cdot 10^{-17} \lor \neg \left(re \le 1.7538691601778439 \cdot 10^{51} \lor \neg \left(re \le 1.0065728139945699 \cdot 10^{120}\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 r18720 = 0.5;
double r18721 = 2.0;
double r18722 = re;
double r18723 = r18722 * r18722;
double r18724 = im;
double r18725 = r18724 * r18724;
double r18726 = r18723 + r18725;
double r18727 = sqrt(r18726);
double r18728 = r18727 - r18722;
double r18729 = r18721 * r18728;
double r18730 = sqrt(r18729);
double r18731 = r18720 * r18730;
return r18731;
}
double f(double re, double im) {
double r18732 = re;
double r18733 = 1.0740812147784067e-17;
bool r18734 = r18732 <= r18733;
double r18735 = 1.753869160177844e+51;
bool r18736 = r18732 <= r18735;
double r18737 = 1.0065728139945699e+120;
bool r18738 = r18732 <= r18737;
double r18739 = !r18738;
bool r18740 = r18736 || r18739;
double r18741 = !r18740;
bool r18742 = r18734 || r18741;
double r18743 = 0.5;
double r18744 = 2.0;
double r18745 = im;
double r18746 = hypot(r18732, r18745);
double r18747 = r18746 - r18732;
double r18748 = 0.0;
double r18749 = r18747 + r18748;
double r18750 = r18744 * r18749;
double r18751 = sqrt(r18750);
double r18752 = r18743 * r18751;
double r18753 = 2.0;
double r18754 = pow(r18745, r18753);
double r18755 = r18754 + r18748;
double r18756 = r18732 + r18746;
double r18757 = r18755 / r18756;
double r18758 = r18744 * r18757;
double r18759 = sqrt(r18758);
double r18760 = r18743 * r18759;
double r18761 = r18742 ? r18752 : r18760;
return r18761;
}



Bits error versus re



Bits error versus im
Results
if re < 1.0740812147784067e-17 or 1.753869160177844e+51 < re < 1.0065728139945699e+120Initial program 33.5
rmApplied add-cube-cbrt33.9
Applied add-sqr-sqrt33.9
Applied sqrt-prod34.0
Applied prod-diff34.0
Simplified7.0
Simplified6.6
if 1.0740812147784067e-17 < re < 1.753869160177844e+51 or 1.0065728139945699e+120 < re Initial program 57.9
rmApplied flip--57.9
Simplified42.3
Simplified30.3
Final simplification11.6
herbie shell --seed 2020060 +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)))))