\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -8.1561596166685901 \cdot 10^{125}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le -3.80996693730795831 \cdot 10^{-103}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 2.33673518569970664 \cdot 10^{-296}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 1.0193327448038136 \cdot 10^{95}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r45040 = re;
double r45041 = r45040 * r45040;
double r45042 = im;
double r45043 = r45042 * r45042;
double r45044 = r45041 + r45043;
double r45045 = sqrt(r45044);
return r45045;
}
double f(double re, double im) {
double r45046 = re;
double r45047 = -8.15615961666859e+125;
bool r45048 = r45046 <= r45047;
double r45049 = -1.0;
double r45050 = r45049 * r45046;
double r45051 = -3.8099669373079583e-103;
bool r45052 = r45046 <= r45051;
double r45053 = r45046 * r45046;
double r45054 = im;
double r45055 = r45054 * r45054;
double r45056 = r45053 + r45055;
double r45057 = sqrt(r45056);
double r45058 = 2.3367351856997066e-296;
bool r45059 = r45046 <= r45058;
double r45060 = 1.0193327448038136e+95;
bool r45061 = r45046 <= r45060;
double r45062 = r45061 ? r45057 : r45046;
double r45063 = r45059 ? r45054 : r45062;
double r45064 = r45052 ? r45057 : r45063;
double r45065 = r45048 ? r45050 : r45064;
return r45065;
}



Bits error versus re



Bits error versus im
Results
if re < -8.15615961666859e+125Initial program 55.6
Taylor expanded around -inf 9.1
if -8.15615961666859e+125 < re < -3.8099669373079583e-103 or 2.3367351856997066e-296 < re < 1.0193327448038136e+95Initial program 18.9
if -3.8099669373079583e-103 < re < 2.3367351856997066e-296Initial program 27.8
Taylor expanded around 0 36.1
if 1.0193327448038136e+95 < re Initial program 50.2
Taylor expanded around inf 10.4
Final simplification18.9
herbie shell --seed 2020100
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))