0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le 2.85149346086491673 \cdot 10^{100}:\\
\;\;\;\;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 r19997 = 0.5;
double r19998 = 2.0;
double r19999 = re;
double r20000 = r19999 * r19999;
double r20001 = im;
double r20002 = r20001 * r20001;
double r20003 = r20000 + r20002;
double r20004 = sqrt(r20003);
double r20005 = r20004 - r19999;
double r20006 = r19998 * r20005;
double r20007 = sqrt(r20006);
double r20008 = r19997 * r20007;
return r20008;
}
double f(double re, double im) {
double r20009 = re;
double r20010 = 2.8514934608649167e+100;
bool r20011 = r20009 <= r20010;
double r20012 = 0.5;
double r20013 = 2.0;
double r20014 = im;
double r20015 = hypot(r20009, r20014);
double r20016 = r20015 - r20009;
double r20017 = 0.0;
double r20018 = r20016 + r20017;
double r20019 = r20013 * r20018;
double r20020 = sqrt(r20019);
double r20021 = r20012 * r20020;
double r20022 = 2.0;
double r20023 = pow(r20014, r20022);
double r20024 = r20023 + r20017;
double r20025 = r20009 + r20015;
double r20026 = r20024 / r20025;
double r20027 = r20013 * r20026;
double r20028 = sqrt(r20027);
double r20029 = r20012 * r20028;
double r20030 = r20011 ? r20021 : r20029;
return r20030;
}



Bits error versus re



Bits error versus im
Results
if re < 2.8514934608649167e+100Initial program 34.8
rmApplied add-cube-cbrt35.1
Applied add-sqr-sqrt35.1
Applied sqrt-prod35.2
Applied prod-diff35.3
Simplified7.9
Simplified7.6
if 2.8514934608649167e+100 < re Initial program 61.4
rmApplied flip--61.4
Simplified44.8
Simplified29.9
Final simplification11.4
herbie shell --seed 2020046 +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)))))