\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -3.488419020361885603121058718518165058597 \cdot 10^{90}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le 321983510253822902678712615891538695684100:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r59165 = re;
double r59166 = r59165 * r59165;
double r59167 = im;
double r59168 = r59167 * r59167;
double r59169 = r59166 + r59168;
double r59170 = sqrt(r59169);
return r59170;
}
double f(double re, double im) {
double r59171 = re;
double r59172 = -3.4884190203618856e+90;
bool r59173 = r59171 <= r59172;
double r59174 = -1.0;
double r59175 = r59174 * r59171;
double r59176 = 3.219835102538229e+41;
bool r59177 = r59171 <= r59176;
double r59178 = r59171 * r59171;
double r59179 = im;
double r59180 = r59179 * r59179;
double r59181 = r59178 + r59180;
double r59182 = sqrt(r59181);
double r59183 = r59177 ? r59182 : r59171;
double r59184 = r59173 ? r59175 : r59183;
return r59184;
}



Bits error versus re



Bits error versus im
Results
if re < -3.4884190203618856e+90Initial program 50.6
Taylor expanded around -inf 10.4
if -3.4884190203618856e+90 < re < 3.219835102538229e+41Initial program 21.9
if 3.219835102538229e+41 < re Initial program 45.5
Taylor expanded around inf 13.7
Final simplification18.1
herbie shell --seed 2019354
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))