\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -32252572021582464786156762700943678236520000:\\
\;\;\;\;-re\\
\mathbf{elif}\;re \le 1.949891623707017456131986292760721140859 \cdot 10^{80}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r56763 = re;
double r56764 = r56763 * r56763;
double r56765 = im;
double r56766 = r56765 * r56765;
double r56767 = r56764 + r56766;
double r56768 = sqrt(r56767);
return r56768;
}
double f(double re, double im) {
double r56769 = re;
double r56770 = -3.2252572021582465e+43;
bool r56771 = r56769 <= r56770;
double r56772 = -r56769;
double r56773 = 1.9498916237070175e+80;
bool r56774 = r56769 <= r56773;
double r56775 = r56769 * r56769;
double r56776 = im;
double r56777 = r56776 * r56776;
double r56778 = r56775 + r56777;
double r56779 = sqrt(r56778);
double r56780 = r56774 ? r56779 : r56769;
double r56781 = r56771 ? r56772 : r56780;
return r56781;
}



Bits error versus re



Bits error versus im
Results
if re < -3.2252572021582465e+43Initial program 43.5
Taylor expanded around -inf 12.8
Simplified12.8
if -3.2252572021582465e+43 < re < 1.9498916237070175e+80Initial program 22.3
if 1.9498916237070175e+80 < re Initial program 48.6
Taylor expanded around inf 10.0
Final simplification18.1
herbie shell --seed 2019351
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))