\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 r66206 = re;
double r66207 = r66206 * r66206;
double r66208 = im;
double r66209 = r66208 * r66208;
double r66210 = r66207 + r66209;
double r66211 = sqrt(r66210);
return r66211;
}
double f(double re, double im) {
double r66212 = im;
double r66213 = -3.436284107232327e+150;
bool r66214 = r66212 <= r66213;
double r66215 = -1.0;
double r66216 = r66215 * r66212;
double r66217 = -1.7874287404230692e-225;
bool r66218 = r66212 <= r66217;
double r66219 = re;
double r66220 = r66219 * r66219;
double r66221 = r66212 * r66212;
double r66222 = r66220 + r66221;
double r66223 = sqrt(r66222);
double r66224 = 5.899377614408183e-308;
bool r66225 = r66212 <= r66224;
double r66226 = 2.4345784437110915e-199;
bool r66227 = r66212 <= r66226;
double r66228 = r66215 * r66219;
double r66229 = 1.7970794289179904e-166;
bool r66230 = r66212 <= r66229;
double r66231 = 1.0688990210562475e-162;
bool r66232 = r66212 <= r66231;
double r66233 = 2.2340209789651782e+109;
bool r66234 = r66212 <= r66233;
double r66235 = r66234 ? r66223 : r66212;
double r66236 = r66232 ? r66228 : r66235;
double r66237 = r66230 ? r66219 : r66236;
double r66238 = r66227 ? r66228 : r66237;
double r66239 = r66225 ? r66219 : r66238;
double r66240 = r66218 ? r66223 : r66239;
double r66241 = r66214 ? r66216 : r66240;
return r66241;
}



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))))