\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -1.3090719358562694 \cdot 10^{108}:\\
\;\;\;\;-re\\
\mathbf{elif}\;re \le -1.70245825704136342 \cdot 10^{-245}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 3.3295675416621997 \cdot 10^{-138}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 5.6732898487300134 \cdot 10^{92}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r36946 = re;
double r36947 = r36946 * r36946;
double r36948 = im;
double r36949 = r36948 * r36948;
double r36950 = r36947 + r36949;
double r36951 = sqrt(r36950);
return r36951;
}
double f(double re, double im) {
double r36952 = re;
double r36953 = -1.3090719358562694e+108;
bool r36954 = r36952 <= r36953;
double r36955 = -r36952;
double r36956 = -1.7024582570413634e-245;
bool r36957 = r36952 <= r36956;
double r36958 = r36952 * r36952;
double r36959 = im;
double r36960 = r36959 * r36959;
double r36961 = r36958 + r36960;
double r36962 = sqrt(r36961);
double r36963 = 3.3295675416622e-138;
bool r36964 = r36952 <= r36963;
double r36965 = 5.673289848730013e+92;
bool r36966 = r36952 <= r36965;
double r36967 = r36966 ? r36962 : r36952;
double r36968 = r36964 ? r36959 : r36967;
double r36969 = r36957 ? r36962 : r36968;
double r36970 = r36954 ? r36955 : r36969;
return r36970;
}



Bits error versus re



Bits error versus im
Results
if re < -1.3090719358562694e+108Initial program 52.7
Taylor expanded around -inf 10.6
Simplified10.6
if -1.3090719358562694e+108 < re < -1.7024582570413634e-245 or 3.3295675416622e-138 < re < 5.673289848730013e+92Initial program 18.2
if -1.7024582570413634e-245 < re < 3.3295675416622e-138Initial program 29.8
Taylor expanded around 0 34.7
if 5.673289848730013e+92 < re Initial program 49.9
Taylor expanded around inf 10.2
Final simplification18.6
herbie shell --seed 2020043
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))