\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -6.5586381711852656 \cdot 10^{44}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;re \le 4.9350549922861674 \cdot 10^{-252}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le 1.230526966536829 \cdot 10^{-195}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 1.70673714189414653 \cdot 10^{49}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r52769 = re;
double r52770 = r52769 * r52769;
double r52771 = im;
double r52772 = r52771 * r52771;
double r52773 = r52770 + r52772;
double r52774 = sqrt(r52773);
return r52774;
}
double f(double re, double im) {
double r52775 = re;
double r52776 = -6.5586381711852656e+44;
bool r52777 = r52775 <= r52776;
double r52778 = -1.0;
double r52779 = r52778 * r52775;
double r52780 = 4.935054992286167e-252;
bool r52781 = r52775 <= r52780;
double r52782 = r52775 * r52775;
double r52783 = im;
double r52784 = r52783 * r52783;
double r52785 = r52782 + r52784;
double r52786 = sqrt(r52785);
double r52787 = 1.230526966536829e-195;
bool r52788 = r52775 <= r52787;
double r52789 = 1.7067371418941465e+49;
bool r52790 = r52775 <= r52789;
double r52791 = r52790 ? r52786 : r52775;
double r52792 = r52788 ? r52783 : r52791;
double r52793 = r52781 ? r52786 : r52792;
double r52794 = r52777 ? r52779 : r52793;
return r52794;
}



Bits error versus re



Bits error versus im
Results
if re < -6.5586381711852656e+44Initial program 45.2
Taylor expanded around -inf 12.8
if -6.5586381711852656e+44 < re < 4.935054992286167e-252 or 1.230526966536829e-195 < re < 1.7067371418941465e+49Initial program 20.7
if 4.935054992286167e-252 < re < 1.230526966536829e-195Initial program 31.4
Taylor expanded around 0 36.0
if 1.7067371418941465e+49 < re Initial program 44.4
Taylor expanded around inf 12.9
Final simplification18.1
herbie shell --seed 2020059
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))