\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -1.178594449777199163791033377764152427439 \cdot 10^{109}:\\
\;\;\;\;-re\\
\mathbf{elif}\;re \le 1.876761322676858408683984671658326382422 \cdot 10^{119}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r29868 = re;
double r29869 = r29868 * r29868;
double r29870 = im;
double r29871 = r29870 * r29870;
double r29872 = r29869 + r29871;
double r29873 = sqrt(r29872);
return r29873;
}
double f(double re, double im) {
double r29874 = re;
double r29875 = -1.1785944497771992e+109;
bool r29876 = r29874 <= r29875;
double r29877 = -r29874;
double r29878 = 1.8767613226768584e+119;
bool r29879 = r29874 <= r29878;
double r29880 = r29874 * r29874;
double r29881 = im;
double r29882 = r29881 * r29881;
double r29883 = r29880 + r29882;
double r29884 = sqrt(r29883);
double r29885 = r29879 ? r29884 : r29874;
double r29886 = r29876 ? r29877 : r29885;
return r29886;
}



Bits error versus re



Bits error versus im
Results
if re < -1.1785944497771992e+109Initial program 54.3
Taylor expanded around -inf 11.4
Simplified11.4
if -1.1785944497771992e+109 < re < 1.8767613226768584e+119Initial program 21.4
if 1.8767613226768584e+119 < re Initial program 55.9
Taylor expanded around inf 8.2
Final simplification17.8
herbie shell --seed 2019235
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))