\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;im \le -2.8884266593894412 \cdot 10^{145}:\\
\;\;\;\;-1 \cdot im\\
\mathbf{elif}\;im \le -8.59044981858877489 \cdot 10^{-223}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;im \le 3.3111519867076028 \cdot 10^{-267}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;im \le 4.35781193024123746 \cdot 10^{99}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;im\\
\end{array}double f(double re, double im) {
double r52028 = re;
double r52029 = r52028 * r52028;
double r52030 = im;
double r52031 = r52030 * r52030;
double r52032 = r52029 + r52031;
double r52033 = sqrt(r52032);
return r52033;
}
double f(double re, double im) {
double r52034 = im;
double r52035 = -2.888426659389441e+145;
bool r52036 = r52034 <= r52035;
double r52037 = -1.0;
double r52038 = r52037 * r52034;
double r52039 = -8.590449818588775e-223;
bool r52040 = r52034 <= r52039;
double r52041 = re;
double r52042 = r52041 * r52041;
double r52043 = r52034 * r52034;
double r52044 = r52042 + r52043;
double r52045 = sqrt(r52044);
double r52046 = 3.311151986707603e-267;
bool r52047 = r52034 <= r52046;
double r52048 = r52037 * r52041;
double r52049 = 4.3578119302412375e+99;
bool r52050 = r52034 <= r52049;
double r52051 = r52050 ? r52045 : r52034;
double r52052 = r52047 ? r52048 : r52051;
double r52053 = r52040 ? r52045 : r52052;
double r52054 = r52036 ? r52038 : r52053;
return r52054;
}



Bits error versus re



Bits error versus im
Results
if im < -2.888426659389441e+145Initial program 61.0
rmApplied flip-+64.0
Simplified64.0
Taylor expanded around -inf 7.4
if -2.888426659389441e+145 < im < -8.590449818588775e-223 or 3.311151986707603e-267 < im < 4.3578119302412375e+99Initial program 19.3
if -8.590449818588775e-223 < im < 3.311151986707603e-267Initial program 30.2
Taylor expanded around -inf 32.4
if 4.3578119302412375e+99 < im Initial program 50.7
Taylor expanded around 0 10.2
Final simplification17.4
herbie shell --seed 2020003
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))