\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -3.4968122243654856 \cdot 10^{112}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le -8.7350730255718 \cdot 10^{-293}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 1.2918788242355971 \cdot 10^{-219}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 1.23023028256962109 \cdot 10^{151}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r50965 = re;
double r50966 = r50965 * r50965;
double r50967 = im;
double r50968 = r50967 * r50967;
double r50969 = r50966 + r50968;
double r50970 = sqrt(r50969);
return r50970;
}
double f(double re, double im) {
double r50971 = re;
double r50972 = -3.4968122243654856e+112;
bool r50973 = r50971 <= r50972;
double r50974 = -1.0;
double r50975 = r50974 * r50971;
double r50976 = -8.7350730255718e-293;
bool r50977 = r50971 <= r50976;
double r50978 = r50971 * r50971;
double r50979 = im;
double r50980 = r50979 * r50979;
double r50981 = r50978 + r50980;
double r50982 = sqrt(r50981);
double r50983 = 1.2918788242355971e-219;
bool r50984 = r50971 <= r50983;
double r50985 = 1.2302302825696211e+151;
bool r50986 = r50971 <= r50985;
double r50987 = r50986 ? r50982 : r50971;
double r50988 = r50984 ? r50979 : r50987;
double r50989 = r50977 ? r50982 : r50988;
double r50990 = r50973 ? r50975 : r50989;
return r50990;
}



Bits error versus re



Bits error versus im
Results
if re < -3.4968122243654856e+112Initial program 52.8
Taylor expanded around -inf 9.3
if -3.4968122243654856e+112 < re < -8.7350730255718e-293 or 1.2918788242355971e-219 < re < 1.2302302825696211e+151Initial program 19.1
if -8.7350730255718e-293 < re < 1.2918788242355971e-219Initial program 31.1
Taylor expanded around 0 31.9
if 1.2302302825696211e+151 < re Initial program 63.0
Taylor expanded around inf 7.2
Final simplification17.2
herbie shell --seed 2020035
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))