\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -4.575837404870754 \cdot 10^{+111}:\\
\;\;\;\;-re\\
\mathbf{elif}\;re \le -6.3441075981154 \cdot 10^{-203}:\\
\;\;\;\;\sqrt{im \cdot im + re \cdot re}\\
\mathbf{elif}\;re \le 3.4426323618367234 \cdot 10^{-252}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 5.965422253765463 \cdot 10^{+140}:\\
\;\;\;\;\sqrt{im \cdot im + re \cdot re}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r780744 = re;
double r780745 = r780744 * r780744;
double r780746 = im;
double r780747 = r780746 * r780746;
double r780748 = r780745 + r780747;
double r780749 = sqrt(r780748);
return r780749;
}
double f(double re, double im) {
double r780750 = re;
double r780751 = -4.575837404870754e+111;
bool r780752 = r780750 <= r780751;
double r780753 = -r780750;
double r780754 = -6.3441075981154e-203;
bool r780755 = r780750 <= r780754;
double r780756 = im;
double r780757 = r780756 * r780756;
double r780758 = r780750 * r780750;
double r780759 = r780757 + r780758;
double r780760 = sqrt(r780759);
double r780761 = 3.4426323618367234e-252;
bool r780762 = r780750 <= r780761;
double r780763 = 5.965422253765463e+140;
bool r780764 = r780750 <= r780763;
double r780765 = r780764 ? r780760 : r780750;
double r780766 = r780762 ? r780756 : r780765;
double r780767 = r780755 ? r780760 : r780766;
double r780768 = r780752 ? r780753 : r780767;
return r780768;
}



Bits error versus re



Bits error versus im
Results
if re < -4.575837404870754e+111Initial program 49.7
Taylor expanded around -inf 9.8
Simplified9.8
if -4.575837404870754e+111 < re < -6.3441075981154e-203 or 3.4426323618367234e-252 < re < 5.965422253765463e+140Initial program 18.1
if -6.3441075981154e-203 < re < 3.4426323618367234e-252Initial program 27.2
Taylor expanded around 0 32.1
if 5.965422253765463e+140 < re Initial program 55.9
Taylor expanded around inf 7.7
Final simplification17.2
herbie shell --seed 2019132
(FPCore (re im)
:name "math.abs on complex"
(sqrt (+ (* re re) (* im im))))