\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -3.00186750331876538 \cdot 10^{143}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le -2.02785725229385748 \cdot 10^{-184}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le -9.306218889451781 \cdot 10^{-290}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 1.74948149916647803 \cdot 10^{126}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r66841 = re;
double r66842 = r66841 * r66841;
double r66843 = im;
double r66844 = r66843 * r66843;
double r66845 = r66842 + r66844;
double r66846 = sqrt(r66845);
return r66846;
}
double f(double re, double im) {
double r66847 = re;
double r66848 = -3.0018675033187654e+143;
bool r66849 = r66847 <= r66848;
double r66850 = -1.0;
double r66851 = r66850 * r66847;
double r66852 = -2.0278572522938575e-184;
bool r66853 = r66847 <= r66852;
double r66854 = r66847 * r66847;
double r66855 = im;
double r66856 = r66855 * r66855;
double r66857 = r66854 + r66856;
double r66858 = sqrt(r66857);
double r66859 = -9.306218889451781e-290;
bool r66860 = r66847 <= r66859;
double r66861 = 1.749481499166478e+126;
bool r66862 = r66847 <= r66861;
double r66863 = r66862 ? r66858 : r66847;
double r66864 = r66860 ? r66855 : r66863;
double r66865 = r66853 ? r66858 : r66864;
double r66866 = r66849 ? r66851 : r66865;
return r66866;
}



Bits error versus re



Bits error versus im
Results
if re < -3.0018675033187654e+143Initial program 60.8
Taylor expanded around -inf 8.1
if -3.0018675033187654e+143 < re < -2.0278572522938575e-184 or -9.306218889451781e-290 < re < 1.749481499166478e+126Initial program 19.5
if -2.0278572522938575e-184 < re < -9.306218889451781e-290Initial program 30.6
Taylor expanded around 0 36.6
if 1.749481499166478e+126 < re Initial program 56.8
Taylor expanded around inf 10.0
Final simplification18.0
herbie shell --seed 2020056
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))