0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -4.3633837281117996 \cdot 10^{+105}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-\left(re + im\right)\right) \cdot 2.0}\\
\mathbf{elif}\;im \le -3.3981436272511237 \cdot 10^{-181}:\\
\;\;\;\;-0.5 \cdot \frac{\sqrt{2.0} \cdot im}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\
\mathbf{elif}\;im \le -1.330280636298453 \cdot 10^{-261}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\
\mathbf{elif}\;im \le 2.9021426245006 \cdot 10^{-309}:\\
\;\;\;\;-0.5 \cdot \frac{\sqrt{2.0} \cdot im}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\
\mathbf{elif}\;im \le 1.6408918126130706 \cdot 10^{-203}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\
\mathbf{elif}\;im \le 6.1294351368168115 \cdot 10^{-31}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2.0} \cdot im}{\sqrt{re + \sqrt{im \cdot im + re \cdot re}}}\\
\mathbf{elif}\;im \le 1523.943947555021:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2 \cdot re\right) \cdot 2.0}\\
\mathbf{elif}\;im \le 1.1910552598904152 \cdot 10^{+142}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \frac{im}{\frac{re + \sqrt{im \cdot im + re \cdot re}}{im}}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(im - re\right)} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r292273 = 0.5;
double r292274 = 2.0;
double r292275 = re;
double r292276 = r292275 * r292275;
double r292277 = im;
double r292278 = r292277 * r292277;
double r292279 = r292276 + r292278;
double r292280 = sqrt(r292279);
double r292281 = r292280 - r292275;
double r292282 = r292274 * r292281;
double r292283 = sqrt(r292282);
double r292284 = r292273 * r292283;
return r292284;
}
double f(double re, double im) {
double r292285 = im;
double r292286 = -4.3633837281117996e+105;
bool r292287 = r292285 <= r292286;
double r292288 = 0.5;
double r292289 = re;
double r292290 = r292289 + r292285;
double r292291 = -r292290;
double r292292 = 2.0;
double r292293 = r292291 * r292292;
double r292294 = sqrt(r292293);
double r292295 = r292288 * r292294;
double r292296 = -3.3981436272511237e-181;
bool r292297 = r292285 <= r292296;
double r292298 = sqrt(r292292);
double r292299 = r292298 * r292285;
double r292300 = r292285 * r292285;
double r292301 = r292289 * r292289;
double r292302 = r292300 + r292301;
double r292303 = sqrt(r292302);
double r292304 = r292289 + r292303;
double r292305 = sqrt(r292304);
double r292306 = r292299 / r292305;
double r292307 = r292288 * r292306;
double r292308 = -r292307;
double r292309 = -1.330280636298453e-261;
bool r292310 = r292285 <= r292309;
double r292311 = -2.0;
double r292312 = r292311 * r292289;
double r292313 = r292312 * r292292;
double r292314 = sqrt(r292313);
double r292315 = r292288 * r292314;
double r292316 = 2.9021426245006e-309;
bool r292317 = r292285 <= r292316;
double r292318 = 1.6408918126130706e-203;
bool r292319 = r292285 <= r292318;
double r292320 = 6.1294351368168115e-31;
bool r292321 = r292285 <= r292320;
double r292322 = 1523.943947555021;
bool r292323 = r292285 <= r292322;
double r292324 = 1.1910552598904152e+142;
bool r292325 = r292285 <= r292324;
double r292326 = r292304 / r292285;
double r292327 = r292285 / r292326;
double r292328 = r292292 * r292327;
double r292329 = sqrt(r292328);
double r292330 = r292288 * r292329;
double r292331 = r292285 - r292289;
double r292332 = r292292 * r292331;
double r292333 = sqrt(r292332);
double r292334 = r292333 * r292288;
double r292335 = r292325 ? r292330 : r292334;
double r292336 = r292323 ? r292315 : r292335;
double r292337 = r292321 ? r292307 : r292336;
double r292338 = r292319 ? r292315 : r292337;
double r292339 = r292317 ? r292308 : r292338;
double r292340 = r292310 ? r292315 : r292339;
double r292341 = r292297 ? r292308 : r292340;
double r292342 = r292287 ? r292295 : r292341;
return r292342;
}



Bits error versus re



Bits error versus im
Results
if im < -4.3633837281117996e+105Initial program 51.1
rmApplied flip--51.2
Simplified51.1
Taylor expanded around -inf 9.5
if -4.3633837281117996e+105 < im < -3.3981436272511237e-181 or -1.330280636298453e-261 < im < 2.9021426245006e-309Initial program 27.7
rmApplied flip--38.7
Simplified31.8
rmApplied associate-*r/31.8
Applied sqrt-div31.3
Taylor expanded around -inf 28.6
Simplified28.6
if -3.3981436272511237e-181 < im < -1.330280636298453e-261 or 2.9021426245006e-309 < im < 1.6408918126130706e-203 or 6.1294351368168115e-31 < im < 1523.943947555021Initial program 40.6
Taylor expanded around -inf 36.1
if 1.6408918126130706e-203 < im < 6.1294351368168115e-31Initial program 31.5
rmApplied flip--46.4
Simplified38.7
rmApplied associate-*r/38.7
Applied sqrt-div37.3
Taylor expanded around 0 33.8
if 1523.943947555021 < im < 1.1910552598904152e+142Initial program 20.0
rmApplied flip--23.9
Simplified21.3
rmApplied associate-/l*21.3
if 1.1910552598904152e+142 < im Initial program 58.1
Taylor expanded around 0 7.9
Final simplification24.1
herbie shell --seed 2019153
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
(* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))