\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -6.75406070697555614550103171070689226775 \cdot 10^{99}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le -1.725651091581785482443039514213583051037 \cdot 10^{-210}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 1.336206432500624299310601884853873391011 \cdot 10^{-202}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 4.964655061894335407151343370923293101746 \cdot 10^{123}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r87179 = re;
double r87180 = r87179 * r87179;
double r87181 = im;
double r87182 = r87181 * r87181;
double r87183 = r87180 + r87182;
double r87184 = sqrt(r87183);
return r87184;
}
double f(double re, double im) {
double r87185 = re;
double r87186 = -6.754060706975556e+99;
bool r87187 = r87185 <= r87186;
double r87188 = -1.0;
double r87189 = r87188 * r87185;
double r87190 = -1.7256510915817855e-210;
bool r87191 = r87185 <= r87190;
double r87192 = r87185 * r87185;
double r87193 = im;
double r87194 = r87193 * r87193;
double r87195 = r87192 + r87194;
double r87196 = sqrt(r87195);
double r87197 = 1.3362064325006243e-202;
bool r87198 = r87185 <= r87197;
double r87199 = 4.9646550618943354e+123;
bool r87200 = r87185 <= r87199;
double r87201 = r87200 ? r87196 : r87185;
double r87202 = r87198 ? r87193 : r87201;
double r87203 = r87191 ? r87196 : r87202;
double r87204 = r87187 ? r87189 : r87203;
return r87204;
}



Bits error versus re



Bits error versus im
Results
if re < -6.754060706975556e+99Initial program 50.7
Taylor expanded around -inf 10.4
if -6.754060706975556e+99 < re < -1.7256510915817855e-210 or 1.3362064325006243e-202 < re < 4.9646550618943354e+123Initial program 17.6
if -1.7256510915817855e-210 < re < 1.3362064325006243e-202Initial program 31.1
Taylor expanded around 0 33.2
if 4.9646550618943354e+123 < re Initial program 56.4
Taylor expanded around inf 9.3
Final simplification17.7
herbie shell --seed 2019353
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))