\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;im \leq -3.148243747314542 \cdot 10^{+78}:\\
\;\;\;\;-im\\
\mathbf{elif}\;im \leq -6.207988187895342 \cdot 10^{-190}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;im \leq -2.4637364856279063 \cdot 10^{-252}:\\
\;\;\;\;-re\\
\mathbf{elif}\;im \leq 4.045551410041801 \cdot 10^{-272}:\\
\;\;\;\;re\\
\mathbf{elif}\;im \leq 1.325491675883215 \cdot 10^{-188}:\\
\;\;\;\;-re\\
\mathbf{elif}\;im \leq 2.4191264962337645 \cdot 10^{+94}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;im\\
\end{array}(FPCore (re im) :precision binary64 (sqrt (+ (* re re) (* im im))))
(FPCore (re im)
:precision binary64
(if (<= im -3.148243747314542e+78)
(- im)
(if (<= im -6.207988187895342e-190)
(sqrt (+ (* re re) (* im im)))
(if (<= im -2.4637364856279063e-252)
(- re)
(if (<= im 4.045551410041801e-272)
re
(if (<= im 1.325491675883215e-188)
(- re)
(if (<= im 2.4191264962337645e+94)
(sqrt (+ (* re re) (* im im)))
im)))))))double code(double re, double im) {
return sqrt((re * re) + (im * im));
}
double code(double re, double im) {
double tmp;
if (im <= -3.148243747314542e+78) {
tmp = -im;
} else if (im <= -6.207988187895342e-190) {
tmp = sqrt((re * re) + (im * im));
} else if (im <= -2.4637364856279063e-252) {
tmp = -re;
} else if (im <= 4.045551410041801e-272) {
tmp = re;
} else if (im <= 1.325491675883215e-188) {
tmp = -re;
} else if (im <= 2.4191264962337645e+94) {
tmp = sqrt((re * re) + (im * im));
} else {
tmp = im;
}
return tmp;
}



Bits error versus re



Bits error versus im
Results
if im < -3.14824374731454187e78Initial program 48.2
Taylor expanded around -inf 12.2
if -3.14824374731454187e78 < im < -6.2079881878953418e-190 or 1.32549167588321498e-188 < im < 2.4191264962337645e94Initial program 18.0
if -6.2079881878953418e-190 < im < -2.4637364856279063e-252 or 4.0455514100418009e-272 < im < 1.32549167588321498e-188Initial program 28.9
Taylor expanded around -inf 36.4
if -2.4637364856279063e-252 < im < 4.0455514100418009e-272Initial program 29.6
Taylor expanded around inf 36.4
if 2.4191264962337645e94 < im Initial program 49.8
Taylor expanded around 0 9.6
Final simplification19.0
herbie shell --seed 2021022
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))