\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -1.287656836218587817843721098850935729447 \cdot 10^{137}:\\
\;\;\;\;-re\\
\mathbf{elif}\;re \le 2.715346883449109812449415853977495365892 \cdot 10^{73}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r72227 = re;
double r72228 = r72227 * r72227;
double r72229 = im;
double r72230 = r72229 * r72229;
double r72231 = r72228 + r72230;
double r72232 = sqrt(r72231);
return r72232;
}
double f(double re, double im) {
double r72233 = re;
double r72234 = -1.2876568362185878e+137;
bool r72235 = r72233 <= r72234;
double r72236 = -r72233;
double r72237 = 2.7153468834491098e+73;
bool r72238 = r72233 <= r72237;
double r72239 = r72233 * r72233;
double r72240 = im;
double r72241 = r72240 * r72240;
double r72242 = r72239 + r72241;
double r72243 = sqrt(r72242);
double r72244 = r72238 ? r72243 : r72233;
double r72245 = r72235 ? r72236 : r72244;
return r72245;
}



Bits error versus re



Bits error versus im
Results
if re < -1.2876568362185878e+137Initial program 59.8
Taylor expanded around -inf 9.3
Simplified9.3
if -1.2876568362185878e+137 < re < 2.7153468834491098e+73Initial program 21.5
if 2.7153468834491098e+73 < re Initial program 47.0
Taylor expanded around inf 10.5
Final simplification17.7
herbie shell --seed 2019304
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))