\sqrt{re \cdot re + im \cdot im}\begin{array}{l}
\mathbf{if}\;im \le -3.4362841072323272 \cdot 10^{150}:\\
\;\;\;\;-1 \cdot im\\
\mathbf{elif}\;im \le -1.7874287404230692 \cdot 10^{-225}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{elif}\;im \le 5.8993776144081826 \cdot 10^{-308}:\\
\;\;\;\;re\\
\mathbf{elif}\;im \le 2.4345784437110915 \cdot 10^{-199}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;im \le 1.7970794289179904 \cdot 10^{-166}:\\
\;\;\;\;re\\
\mathbf{elif}\;im \le 1.0688990210562475 \cdot 10^{-162}:\\
\;\;\;\;-1 \cdot re\\
\mathbf{elif}\;im \le 2.23402097896517821 \cdot 10^{109}:\\
\;\;\;\;\sqrt{re \cdot re + im \cdot im}\\
\mathbf{else}:\\
\;\;\;\;im\\
\end{array}double f(double re, double im) {
double r62877 = re;
double r62878 = r62877 * r62877;
double r62879 = im;
double r62880 = r62879 * r62879;
double r62881 = r62878 + r62880;
double r62882 = sqrt(r62881);
return r62882;
}
double f(double re, double im) {
double r62883 = im;
double r62884 = -3.436284107232327e+150;
bool r62885 = r62883 <= r62884;
double r62886 = -1.0;
double r62887 = r62886 * r62883;
double r62888 = -1.7874287404230692e-225;
bool r62889 = r62883 <= r62888;
double r62890 = re;
double r62891 = r62890 * r62890;
double r62892 = r62883 * r62883;
double r62893 = r62891 + r62892;
double r62894 = sqrt(r62893);
double r62895 = 5.899377614408183e-308;
bool r62896 = r62883 <= r62895;
double r62897 = 2.4345784437110915e-199;
bool r62898 = r62883 <= r62897;
double r62899 = r62886 * r62890;
double r62900 = 1.7970794289179904e-166;
bool r62901 = r62883 <= r62900;
double r62902 = 1.0688990210562475e-162;
bool r62903 = r62883 <= r62902;
double r62904 = 2.2340209789651782e+109;
bool r62905 = r62883 <= r62904;
double r62906 = r62905 ? r62894 : r62883;
double r62907 = r62903 ? r62899 : r62906;
double r62908 = r62901 ? r62890 : r62907;
double r62909 = r62898 ? r62899 : r62908;
double r62910 = r62896 ? r62890 : r62909;
double r62911 = r62889 ? r62894 : r62910;
double r62912 = r62885 ? r62887 : r62911;
return r62912;
}



Bits error versus re



Bits error versus im
Results
if im < -3.436284107232327e+150Initial program 62.6
rmApplied flip-+64.0
Simplified64.0
Taylor expanded around -inf 8.8
if -3.436284107232327e+150 < im < -1.7874287404230692e-225 or 1.0688990210562475e-162 < im < 2.2340209789651782e+109Initial program 17.2
if -1.7874287404230692e-225 < im < 5.899377614408183e-308 or 2.4345784437110915e-199 < im < 1.7970794289179904e-166Initial program 31.5
Taylor expanded around inf 33.7
if 5.899377614408183e-308 < im < 2.4345784437110915e-199 or 1.7970794289179904e-166 < im < 1.0688990210562475e-162Initial program 31.3
Taylor expanded around -inf 35.2
if 2.2340209789651782e+109 < im Initial program 53.4
Taylor expanded around 0 9.8
Final simplification18.1
herbie shell --seed 2020060
(FPCore (re im)
:name "math.abs on complex"
:precision binary64
(sqrt (+ (* re re) (* im im))))