\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -1.199115232773121436978557182122313209889 \cdot 10^{121}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le -9.538446928549385159760190961856882540607 \cdot 10^{-200}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 2.446990464932721506135775225301175117932 \cdot 10^{-197}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 3.937572631944601419338780453027731481475 \cdot 10^{124}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r45106 = re;
double r45107 = r45106 * r45106;
double r45108 = im;
double r45109 = r45108 * r45108;
double r45110 = r45107 + r45109;
double r45111 = sqrt(r45110);
return r45111;
}
double f(double re, double im) {
double r45112 = re;
double r45113 = -1.1991152327731214e+121;
bool r45114 = r45112 <= r45113;
double r45115 = -1.0;
double r45116 = r45115 * r45112;
double r45117 = -9.538446928549385e-200;
bool r45118 = r45112 <= r45117;
double r45119 = r45112 * r45112;
double r45120 = im;
double r45121 = r45120 * r45120;
double r45122 = r45119 + r45121;
double r45123 = sqrt(r45122);
double r45124 = 2.4469904649327215e-197;
bool r45125 = r45112 <= r45124;
double r45126 = 3.9375726319446014e+124;
bool r45127 = r45112 <= r45126;
double r45128 = r45127 ? r45123 : r45112;
double r45129 = r45125 ? r45120 : r45128;
double r45130 = r45118 ? r45123 : r45129;
double r45131 = r45114 ? r45116 : r45130;
return r45131;
}



Bits error versus re



Bits error versus im
Results
if re < -1.1991152327731214e+121Initial program 55.2
Taylor expanded around -inf 8.9
if -1.1991152327731214e+121 < re < -9.538446928549385e-200 or 2.4469904649327215e-197 < re < 3.9375726319446014e+124Initial program 18.3
if -9.538446928549385e-200 < re < 2.4469904649327215e-197Initial program 31.0
Taylor expanded around 0 33.6
if 3.9375726319446014e+124 < re Initial program 57.1
Taylor expanded around inf 8.7
Final simplification18.1
herbie shell --seed 2019297
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))