\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;im \le -5.11882901353521224 \cdot 10^{146}:\\
\;\;\;\;-1 \cdot im\\
\mathbf{elif}\;im \le 9.32078944865675832 \cdot 10^{57}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;im\\
\end{array}double f(double re, double im) {
double r53108 = re;
double r53109 = r53108 * r53108;
double r53110 = im;
double r53111 = r53110 * r53110;
double r53112 = r53109 + r53111;
double r53113 = sqrt(r53112);
return r53113;
}
double f(double re, double im) {
double r53114 = im;
double r53115 = -5.118829013535212e+146;
bool r53116 = r53114 <= r53115;
double r53117 = -1.0;
double r53118 = r53117 * r53114;
double r53119 = 9.320789448656758e+57;
bool r53120 = r53114 <= r53119;
double r53121 = re;
double r53122 = r53121 * r53121;
double r53123 = r53114 * r53114;
double r53124 = r53122 + r53123;
double r53125 = sqrt(r53124);
double r53126 = r53120 ? r53125 : r53114;
double r53127 = r53116 ? r53118 : r53126;
return r53127;
}



Bits error versus re



Bits error versus im
Results
if im < -5.118829013535212e+146Initial program 61.8
rmApplied flip-+64.0
Simplified64.0
Taylor expanded around -inf 7.7
if -5.118829013535212e+146 < im < 9.320789448656758e+57Initial program 21.4
if 9.320789448656758e+57 < im Initial program 46.5
Taylor expanded around 0 13.0
Final simplification17.8
herbie shell --seed 2020033
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))