\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;re \le -4.391819308233852128501761539035118741121 \cdot 10^{130}:\\
\;\;\;\;-re\\
\mathbf{elif}\;re \le -1.082781542809915013551950598635310407664 \cdot 10^{-198}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;re \le -1.350068654779021630227434578668149263935 \cdot 10^{-288}:\\
\;\;\;\;im\\
\mathbf{elif}\;re \le 2.076008095509726135706521303221876391822 \cdot 10^{76}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;re\\
\end{array}double f(double re, double im) {
double r43790 = re;
double r43791 = r43790 * r43790;
double r43792 = im;
double r43793 = r43792 * r43792;
double r43794 = r43791 + r43793;
double r43795 = sqrt(r43794);
return r43795;
}
double f(double re, double im) {
double r43796 = re;
double r43797 = -4.391819308233852e+130;
bool r43798 = r43796 <= r43797;
double r43799 = -r43796;
double r43800 = -1.082781542809915e-198;
bool r43801 = r43796 <= r43800;
double r43802 = r43796 * r43796;
double r43803 = im;
double r43804 = r43803 * r43803;
double r43805 = r43802 + r43804;
double r43806 = sqrt(r43805);
double r43807 = -1.3500686547790216e-288;
bool r43808 = r43796 <= r43807;
double r43809 = 2.076008095509726e+76;
bool r43810 = r43796 <= r43809;
double r43811 = r43810 ? r43806 : r43796;
double r43812 = r43808 ? r43803 : r43811;
double r43813 = r43801 ? r43806 : r43812;
double r43814 = r43798 ? r43799 : r43813;
return r43814;
}



Bits error versus re



Bits error versus im
Results
if re < -4.391819308233852e+130Initial program 58.6
Taylor expanded around -inf 8.7
Simplified8.7
if -4.391819308233852e+130 < re < -1.082781542809915e-198 or -1.3500686547790216e-288 < re < 2.076008095509726e+76Initial program 20.3
if -1.082781542809915e-198 < re < -1.3500686547790216e-288Initial program 29.0
Taylor expanded around 0 32.4
if 2.076008095509726e+76 < re Initial program 48.1
Taylor expanded around inf 12.0
Final simplification17.9
herbie shell --seed 2019347
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))