\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -3.759129799435656048380758639203459110241 \cdot 10^{141}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le 4.467681746519448501796220879996979165015 \cdot 10^{133}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r54009 = re;
double r54010 = r54009 * r54009;
double r54011 = im;
double r54012 = r54011 * r54011;
double r54013 = r54010 + r54012;
double r54014 = sqrt(r54013);
return r54014;
}
double f(double re, double im) {
double r54015 = re;
double r54016 = -3.759129799435656e+141;
bool r54017 = r54015 <= r54016;
double r54018 = -1.0;
double r54019 = r54018 * r54015;
double r54020 = 4.4676817465194485e+133;
bool r54021 = r54015 <= r54020;
double r54022 = r54015 * r54015;
double r54023 = im;
double r54024 = r54023 * r54023;
double r54025 = r54022 + r54024;
double r54026 = sqrt(r54025);
double r54027 = r54021 ? r54026 : r54015;
double r54028 = r54017 ? r54019 : r54027;
return r54028;
}



Bits error versus re



Bits error versus im
Results
if re < -3.759129799435656e+141Initial program 61.4
Taylor expanded around -inf 8.0
if -3.759129799435656e+141 < re < 4.4676817465194485e+133Initial program 21.7
if 4.4676817465194485e+133 < re Initial program 58.2
Taylor expanded around inf 9.1
Final simplification17.9
herbie shell --seed 2020002
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))