0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -9.958741127435869792223497733767457453485 \cdot 10^{-42}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -1.998473793179742598054252273926425808671 \cdot 10^{-109}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{2 \cdot im}{\sqrt{re \cdot re + im \cdot im} + re} \cdot im}\\
\mathbf{elif}\;re \le 3.824319967948722127918572797361195693664 \cdot 10^{-251}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 5.243516123083839465290070379456236260621 \cdot 10^{57}:\\
\;\;\;\;0.5 \cdot \left(\frac{\sqrt{2}}{\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}} \cdot \frac{\left|im\right|}{\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}}\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{re + re}}\right)\\
\end{array}double f(double re, double im) {
double r26089 = 0.5;
double r26090 = 2.0;
double r26091 = re;
double r26092 = r26091 * r26091;
double r26093 = im;
double r26094 = r26093 * r26093;
double r26095 = r26092 + r26094;
double r26096 = sqrt(r26095);
double r26097 = r26096 - r26091;
double r26098 = r26090 * r26097;
double r26099 = sqrt(r26098);
double r26100 = r26089 * r26099;
return r26100;
}
double f(double re, double im) {
double r26101 = re;
double r26102 = -9.95874112743587e-42;
bool r26103 = r26101 <= r26102;
double r26104 = 0.5;
double r26105 = 2.0;
double r26106 = -2.0;
double r26107 = r26106 * r26101;
double r26108 = r26105 * r26107;
double r26109 = sqrt(r26108);
double r26110 = r26104 * r26109;
double r26111 = -1.9984737931797426e-109;
bool r26112 = r26101 <= r26111;
double r26113 = im;
double r26114 = r26105 * r26113;
double r26115 = r26101 * r26101;
double r26116 = r26113 * r26113;
double r26117 = r26115 + r26116;
double r26118 = sqrt(r26117);
double r26119 = r26118 + r26101;
double r26120 = r26114 / r26119;
double r26121 = r26120 * r26113;
double r26122 = sqrt(r26121);
double r26123 = r26104 * r26122;
double r26124 = 3.824319967948722e-251;
bool r26125 = r26101 <= r26124;
double r26126 = r26113 - r26101;
double r26127 = r26105 * r26126;
double r26128 = sqrt(r26127);
double r26129 = r26104 * r26128;
double r26130 = 5.2435161230838395e+57;
bool r26131 = r26101 <= r26130;
double r26132 = sqrt(r26105);
double r26133 = sqrt(r26119);
double r26134 = sqrt(r26133);
double r26135 = r26132 / r26134;
double r26136 = fabs(r26113);
double r26137 = r26136 / r26134;
double r26138 = r26135 * r26137;
double r26139 = r26104 * r26138;
double r26140 = r26101 + r26101;
double r26141 = sqrt(r26140);
double r26142 = r26136 / r26141;
double r26143 = r26132 * r26142;
double r26144 = r26104 * r26143;
double r26145 = r26131 ? r26139 : r26144;
double r26146 = r26125 ? r26129 : r26145;
double r26147 = r26112 ? r26123 : r26146;
double r26148 = r26103 ? r26110 : r26147;
return r26148;
}



Bits error versus re



Bits error versus im
Results
if re < -9.95874112743587e-42Initial program 36.7
Taylor expanded around -inf 16.7
if -9.95874112743587e-42 < re < -1.9984737931797426e-109Initial program 16.2
rmApplied flip--36.1
Applied associate-*r/36.2
Applied sqrt-div36.4
Simplified36.4
rmApplied sqrt-undiv36.2
Simplified35.7
if -1.9984737931797426e-109 < re < 3.824319967948722e-251Initial program 27.5
Taylor expanded around 0 35.7
if 3.824319967948722e-251 < re < 5.2435161230838395e+57Initial program 38.6
rmApplied flip--38.5
Applied associate-*r/38.5
Applied sqrt-div38.6
Simplified31.9
rmApplied add-sqr-sqrt31.9
Applied sqrt-prod32.0
Applied sqrt-prod32.0
Applied times-frac32.0
Simplified20.6
if 5.2435161230838395e+57 < re Initial program 58.7
rmApplied flip--58.7
Applied associate-*r/58.7
Applied sqrt-div58.7
Simplified40.9
rmApplied *-un-lft-identity40.9
Applied sqrt-prod40.9
Applied sqrt-prod40.9
Applied times-frac40.9
Simplified40.9
Simplified36.4
Taylor expanded around inf 13.1
Final simplification21.9
herbie shell --seed 2019325
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
:precision binary64
(* 0.5 (sqrt (* 2 (- (sqrt (+ (* re re) (* im im))) re)))))