\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -8.15024475259887937 \cdot 10^{153}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le -9.52817244882649108 \cdot 10^{-265}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 1.04745553524127593 \cdot 10^{-281}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 2.70835173311075 \cdot 10^{105}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r48553 = re;
double r48554 = r48553 * r48553;
double r48555 = im;
double r48556 = r48555 * r48555;
double r48557 = r48554 + r48556;
double r48558 = sqrt(r48557);
return r48558;
}
double f(double re, double im) {
double r48559 = re;
double r48560 = -8.15024475259888e+153;
bool r48561 = r48559 <= r48560;
double r48562 = -1.0;
double r48563 = r48562 * r48559;
double r48564 = -9.528172448826491e-265;
bool r48565 = r48559 <= r48564;
double r48566 = r48559 * r48559;
double r48567 = im;
double r48568 = r48567 * r48567;
double r48569 = r48566 + r48568;
double r48570 = sqrt(r48569);
double r48571 = 1.047455535241276e-281;
bool r48572 = r48559 <= r48571;
double r48573 = 2.70835173311075e+105;
bool r48574 = r48559 <= r48573;
double r48575 = r48574 ? r48570 : r48559;
double r48576 = r48572 ? r48567 : r48575;
double r48577 = r48565 ? r48570 : r48576;
double r48578 = r48561 ? r48563 : r48577;
return r48578;
}



Bits error versus re



Bits error versus im
Results
if re < -8.15024475259888e+153Initial program 63.9
Taylor expanded around -inf 7.8
if -8.15024475259888e+153 < re < -9.528172448826491e-265 or 1.047455535241276e-281 < re < 2.70835173311075e+105Initial program 21.0
if -9.528172448826491e-265 < re < 1.047455535241276e-281Initial program 30.8
Taylor expanded around 0 32.9
if 2.70835173311075e+105 < re Initial program 52.5
Taylor expanded around inf 8.8
Final simplification18.0
herbie shell --seed 2020046
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))