0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -6.52307626026875473 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le 1.66118578644665393 \cdot 10^{-162}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{elif}\;re \le 2.79117419776841501 \cdot 10^{-132}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;re \le 1.9233986607295234 \cdot 10^{-11}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\frac{\left|im\right|}{\sqrt[3]{re + \sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{re + \sqrt{im \cdot im + re \cdot re}}} \cdot \frac{\left|im\right|}{\sqrt[3]{re + \sqrt{im \cdot im + re \cdot re}}}\right)}\\
\mathbf{elif}\;re \le 154181558422709.656:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \le 1.11640916162610467 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{im \cdot im} \cdot \sqrt{2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{im \cdot im}{re + re} \cdot 2} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r20207 = 0.5;
double r20208 = 2.0;
double r20209 = re;
double r20210 = r20209 * r20209;
double r20211 = im;
double r20212 = r20211 * r20211;
double r20213 = r20210 + r20212;
double r20214 = sqrt(r20213);
double r20215 = r20214 - r20209;
double r20216 = r20208 * r20215;
double r20217 = sqrt(r20216);
double r20218 = r20207 * r20217;
return r20218;
}
double f(double re, double im) {
double r20219 = re;
double r20220 = -6.523076260268755e+150;
bool r20221 = r20219 <= r20220;
double r20222 = 0.5;
double r20223 = 2.0;
double r20224 = -2.0;
double r20225 = r20224 * r20219;
double r20226 = r20223 * r20225;
double r20227 = sqrt(r20226);
double r20228 = r20222 * r20227;
double r20229 = 1.661185786446654e-162;
bool r20230 = r20219 <= r20229;
double r20231 = r20219 * r20219;
double r20232 = im;
double r20233 = r20232 * r20232;
double r20234 = r20231 + r20233;
double r20235 = sqrt(r20234);
double r20236 = r20235 - r20219;
double r20237 = r20223 * r20236;
double r20238 = sqrt(r20237);
double r20239 = r20222 * r20238;
double r20240 = 2.791174197768415e-132;
bool r20241 = r20219 <= r20240;
double r20242 = r20219 + r20232;
double r20243 = -r20242;
double r20244 = r20223 * r20243;
double r20245 = sqrt(r20244);
double r20246 = r20222 * r20245;
double r20247 = 1.9233986607295234e-11;
bool r20248 = r20219 <= r20247;
double r20249 = fabs(r20232);
double r20250 = r20233 + r20231;
double r20251 = sqrt(r20250);
double r20252 = r20219 + r20251;
double r20253 = cbrt(r20252);
double r20254 = r20253 * r20253;
double r20255 = r20249 / r20254;
double r20256 = r20249 / r20253;
double r20257 = r20255 * r20256;
double r20258 = r20223 * r20257;
double r20259 = sqrt(r20258);
double r20260 = r20222 * r20259;
double r20261 = 154181558422709.66;
bool r20262 = r20219 <= r20261;
double r20263 = r20232 - r20219;
double r20264 = r20223 * r20263;
double r20265 = sqrt(r20264);
double r20266 = r20222 * r20265;
double r20267 = 1.1164091616261047e+150;
bool r20268 = r20219 <= r20267;
double r20269 = sqrt(r20233);
double r20270 = sqrt(r20223);
double r20271 = r20269 * r20270;
double r20272 = r20235 + r20219;
double r20273 = sqrt(r20272);
double r20274 = r20271 / r20273;
double r20275 = r20222 * r20274;
double r20276 = r20219 + r20219;
double r20277 = r20233 / r20276;
double r20278 = r20277 * r20223;
double r20279 = sqrt(r20278);
double r20280 = r20279 * r20222;
double r20281 = r20268 ? r20275 : r20280;
double r20282 = r20262 ? r20266 : r20281;
double r20283 = r20248 ? r20260 : r20282;
double r20284 = r20241 ? r20246 : r20283;
double r20285 = r20230 ? r20239 : r20284;
double r20286 = r20221 ? r20228 : r20285;
return r20286;
}



Bits error versus re



Bits error versus im
Results
if re < -6.523076260268755e+150Initial program 63.1
Taylor expanded around -inf 7.8
if -6.523076260268755e+150 < re < 1.661185786446654e-162Initial program 22.4
if 1.661185786446654e-162 < re < 2.791174197768415e-132Initial program 34.3
rmApplied add-cube-cbrt35.0
rmApplied flip--35.0
Simplified33.7
Simplified33.3
Taylor expanded around -inf 42.2
if 2.791174197768415e-132 < re < 1.9233986607295234e-11Initial program 40.3
rmApplied add-cube-cbrt41.4
rmApplied flip--41.4
Simplified31.9
Simplified31.5
rmApplied add-cube-cbrt31.9
Applied add-sqr-sqrt31.9
Applied times-frac32.0
Simplified31.9
Simplified28.2
if 1.9233986607295234e-11 < re < 154181558422709.66Initial program 44.7
Taylor expanded around 0 50.0
if 154181558422709.66 < re < 1.1164091616261047e+150Initial program 49.4
rmApplied sqrt-prod49.4
rmApplied flip--49.4
Applied sqrt-div49.4
Applied associate-*r/49.4
Simplified25.8
if 1.1164091616261047e+150 < re Initial program 63.9
rmApplied add-cube-cbrt64.0
rmApplied flip--64.0
Simplified49.2
Simplified49.2
Taylor expanded around 0 29.6
Final simplification23.5
herbie shell --seed 2020045
(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)))))