\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -8789989068572990460:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le -4.2015690056388073 \cdot 10^{-231}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 1.33367121357677706 \cdot 10^{-291}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 8.0509896767148372 \cdot 10^{-74}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 1.3202809311828264 \cdot 10^{-48}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 3.9171532397504441 \cdot 10^{68}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r39428 = re;
double r39429 = r39428 * r39428;
double r39430 = im;
double r39431 = r39430 * r39430;
double r39432 = r39429 + r39431;
double r39433 = sqrt(r39432);
return r39433;
}
double f(double re, double im) {
double r39434 = re;
double r39435 = -8.78998906857299e+18;
bool r39436 = r39434 <= r39435;
double r39437 = -1.0;
double r39438 = r39437 * r39434;
double r39439 = -4.2015690056388073e-231;
bool r39440 = r39434 <= r39439;
double r39441 = r39434 * r39434;
double r39442 = im;
double r39443 = r39442 * r39442;
double r39444 = r39441 + r39443;
double r39445 = sqrt(r39444);
double r39446 = 1.333671213576777e-291;
bool r39447 = r39434 <= r39446;
double r39448 = 8.050989676714837e-74;
bool r39449 = r39434 <= r39448;
double r39450 = 1.3202809311828264e-48;
bool r39451 = r39434 <= r39450;
double r39452 = 3.917153239750444e+68;
bool r39453 = r39434 <= r39452;
double r39454 = r39453 ? r39445 : r39434;
double r39455 = r39451 ? r39442 : r39454;
double r39456 = r39449 ? r39445 : r39455;
double r39457 = r39447 ? r39442 : r39456;
double r39458 = r39440 ? r39445 : r39457;
double r39459 = r39436 ? r39438 : r39458;
return r39459;
}



Bits error versus re



Bits error versus im
Results
if re < -8.78998906857299e+18Initial program 42.6
Taylor expanded around -inf 13.9
if -8.78998906857299e+18 < re < -4.2015690056388073e-231 or 1.333671213576777e-291 < re < 8.050989676714837e-74 or 1.3202809311828264e-48 < re < 3.917153239750444e+68Initial program 20.2
if -4.2015690056388073e-231 < re < 1.333671213576777e-291 or 8.050989676714837e-74 < re < 1.3202809311828264e-48Initial program 28.0
Taylor expanded around 0 36.9
if 3.917153239750444e+68 < re Initial program 48.1
Taylor expanded around inf 12.1
Final simplification18.8
herbie shell --seed 2020036
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))