0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;im \le -3.5257173004906795 \cdot 10^{+59}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(-2.0\right) \cdot \left(re + im\right)}\\
\mathbf{elif}\;im \le -3.9560523477270614 \cdot 10^{-109}:\\
\;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\
\mathbf{elif}\;im \le 1.084097404357406 \cdot 10^{-150}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 116.86075407426041:\\
\;\;\;\;\sqrt{2.0 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} + re}} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r622545 = 0.5;
double r622546 = 2.0;
double r622547 = re;
double r622548 = r622547 * r622547;
double r622549 = im;
double r622550 = r622549 * r622549;
double r622551 = r622548 + r622550;
double r622552 = sqrt(r622551);
double r622553 = r622552 - r622547;
double r622554 = r622546 * r622553;
double r622555 = sqrt(r622554);
double r622556 = r622545 * r622555;
return r622556;
}
double f(double re, double im) {
double r622557 = im;
double r622558 = -3.5257173004906795e+59;
bool r622559 = r622557 <= r622558;
double r622560 = 0.5;
double r622561 = 2.0;
double r622562 = -r622561;
double r622563 = re;
double r622564 = r622563 + r622557;
double r622565 = r622562 * r622564;
double r622566 = sqrt(r622565);
double r622567 = r622560 * r622566;
double r622568 = -3.9560523477270614e-109;
bool r622569 = r622557 <= r622568;
double r622570 = r622557 * r622557;
double r622571 = r622563 * r622563;
double r622572 = r622570 + r622571;
double r622573 = sqrt(r622572);
double r622574 = r622573 + r622563;
double r622575 = r622570 / r622574;
double r622576 = r622561 * r622575;
double r622577 = sqrt(r622576);
double r622578 = r622577 * r622560;
double r622579 = 1.084097404357406e-150;
bool r622580 = r622557 <= r622579;
double r622581 = -2.0;
double r622582 = r622581 * r622563;
double r622583 = r622561 * r622582;
double r622584 = sqrt(r622583);
double r622585 = r622560 * r622584;
double r622586 = 116.86075407426041;
bool r622587 = r622557 <= r622586;
double r622588 = r622557 - r622563;
double r622589 = r622561 * r622588;
double r622590 = sqrt(r622589);
double r622591 = r622560 * r622590;
double r622592 = r622587 ? r622578 : r622591;
double r622593 = r622580 ? r622585 : r622592;
double r622594 = r622569 ? r622578 : r622593;
double r622595 = r622559 ? r622567 : r622594;
return r622595;
}



Bits error versus re



Bits error versus im
Results
if im < -3.5257173004906795e+59Initial program 44.2
rmApplied add-sqr-sqrt44.2
Applied sqrt-prod44.2
rmApplied sqrt-unprod44.2
Simplified44.2
Taylor expanded around -inf 11.2
if -3.5257173004906795e+59 < im < -3.9560523477270614e-109 or 1.084097404357406e-150 < im < 116.86075407426041Initial program 24.9
rmApplied add-sqr-sqrt24.9
Applied sqrt-prod25.0
rmApplied flip--33.5
Simplified26.1
Simplified26.0
if -3.9560523477270614e-109 < im < 1.084097404357406e-150Initial program 40.9
Taylor expanded around -inf 35.5
if 116.86075407426041 < im Initial program 40.8
rmApplied add-sqr-sqrt40.8
Applied sqrt-prod40.9
rmApplied sqrt-unprod40.8
Simplified40.8
Taylor expanded around inf 13.8
Final simplification22.8
herbie shell --seed 2019134
(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)))))