\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -5.810291952691062 \cdot 10^{115}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le -6.2167173716269886 \cdot 10^{-264}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 2.95065728572471767 \cdot 10^{-235}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 2.97128001067495674 \cdot 10^{26}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r98760 = re;
double r98761 = r98760 * r98760;
double r98762 = im;
double r98763 = r98762 * r98762;
double r98764 = r98761 + r98763;
double r98765 = sqrt(r98764);
return r98765;
}
double f(double re, double im) {
double r98766 = re;
double r98767 = -5.810291952691062e+115;
bool r98768 = r98766 <= r98767;
double r98769 = -1.0;
double r98770 = r98769 * r98766;
double r98771 = -6.216717371626989e-264;
bool r98772 = r98766 <= r98771;
double r98773 = r98766 * r98766;
double r98774 = im;
double r98775 = r98774 * r98774;
double r98776 = r98773 + r98775;
double r98777 = sqrt(r98776);
double r98778 = 2.9506572857247177e-235;
bool r98779 = r98766 <= r98778;
double r98780 = 2.9712800106749567e+26;
bool r98781 = r98766 <= r98780;
double r98782 = r98781 ? r98777 : r98766;
double r98783 = r98779 ? r98774 : r98782;
double r98784 = r98772 ? r98777 : r98783;
double r98785 = r98768 ? r98770 : r98784;
return r98785;
}



Bits error versus re



Bits error versus im
Results
if re < -5.810291952691062e+115Initial program 54.1
Taylor expanded around -inf 9.4
if -5.810291952691062e+115 < re < -6.216717371626989e-264 or 2.9506572857247177e-235 < re < 2.9712800106749567e+26Initial program 20.2
if -6.216717371626989e-264 < re < 2.9506572857247177e-235Initial program 29.6
Taylor expanded around 0 32.4
if 2.9712800106749567e+26 < re Initial program 42.2
Taylor expanded around inf 13.3
Final simplification18.1
herbie shell --seed 2020021
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))