\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -2.3301205168757104 \cdot 10^{+153}:\\
\;\;\;\;-re\\
\mathbf{elif}\;re \le -3.728827270067989 \cdot 10^{-149}:\\
\;\;\;\;\sqrt{im \cdot im + re \cdot re}\\
\mathbf{elif}\;re \le 2.0900313658610145 \cdot 10^{-225}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 1.1525123229926465 \cdot 10^{+142}:\\
\;\;\;\;\sqrt{im \cdot im + re \cdot re}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r862968 = re;
double r862969 = r862968 * r862968;
double r862970 = im;
double r862971 = r862970 * r862970;
double r862972 = r862969 + r862971;
double r862973 = sqrt(r862972);
return r862973;
}
double f(double re, double im) {
double r862974 = re;
double r862975 = -2.3301205168757104e+153;
bool r862976 = r862974 <= r862975;
double r862977 = -r862974;
double r862978 = -3.728827270067989e-149;
bool r862979 = r862974 <= r862978;
double r862980 = im;
double r862981 = r862980 * r862980;
double r862982 = r862974 * r862974;
double r862983 = r862981 + r862982;
double r862984 = sqrt(r862983);
double r862985 = 2.0900313658610145e-225;
bool r862986 = r862974 <= r862985;
double r862987 = 1.1525123229926465e+142;
bool r862988 = r862974 <= r862987;
double r862989 = r862988 ? r862984 : r862974;
double r862990 = r862986 ? r862980 : r862989;
double r862991 = r862979 ? r862984 : r862990;
double r862992 = r862976 ? r862977 : r862991;
return r862992;
}



Bits error versus re



Bits error versus im
Results
if re < -2.3301205168757104e+153Initial program 59.2
Taylor expanded around -inf 8.4
Simplified8.4
if -2.3301205168757104e+153 < re < -3.728827270067989e-149 or 2.0900313658610145e-225 < re < 1.1525123229926465e+142Initial program 16.2
if -3.728827270067989e-149 < re < 2.0900313658610145e-225Initial program 29.2
Taylor expanded around 0 35.5
if 1.1525123229926465e+142 < re Initial program 55.6
Taylor expanded around inf 7.4
Final simplification17.8
herbie shell --seed 2019130
(FPCore (re im)
:name "math.abs on complex"
(sqrt (+ (* re re) (* im im))))