0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -4.019634613598924703951801238213161238145 \cdot 10^{134}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\
\mathbf{elif}\;re \le -5.906464274638443054311194221032669730935 \cdot 10^{-269}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;re \le 3.612698340849465609622753377394501158549 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2}}{\frac{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}{\left|im\right|}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{2 \cdot re}}\\
\end{array}double f(double re, double im) {
double r26651 = 0.5;
double r26652 = 2.0;
double r26653 = re;
double r26654 = r26653 * r26653;
double r26655 = im;
double r26656 = r26655 * r26655;
double r26657 = r26654 + r26656;
double r26658 = sqrt(r26657);
double r26659 = r26658 - r26653;
double r26660 = r26652 * r26659;
double r26661 = sqrt(r26660);
double r26662 = r26651 * r26661;
return r26662;
}
double f(double re, double im) {
double r26663 = re;
double r26664 = -4.019634613598925e+134;
bool r26665 = r26663 <= r26664;
double r26666 = 0.5;
double r26667 = 2.0;
double r26668 = -r26663;
double r26669 = r26668 - r26663;
double r26670 = r26667 * r26669;
double r26671 = sqrt(r26670);
double r26672 = r26666 * r26671;
double r26673 = -5.906464274638443e-269;
bool r26674 = r26663 <= r26673;
double r26675 = r26663 * r26663;
double r26676 = im;
double r26677 = r26676 * r26676;
double r26678 = r26675 + r26677;
double r26679 = sqrt(r26678);
double r26680 = sqrt(r26679);
double r26681 = r26680 * r26680;
double r26682 = r26681 - r26663;
double r26683 = r26667 * r26682;
double r26684 = sqrt(r26683);
double r26685 = r26666 * r26684;
double r26686 = 3.6126983408494656e+150;
bool r26687 = r26663 <= r26686;
double r26688 = sqrt(r26667);
double r26689 = r26679 + r26663;
double r26690 = sqrt(r26689);
double r26691 = fabs(r26676);
double r26692 = r26690 / r26691;
double r26693 = r26688 / r26692;
double r26694 = r26666 * r26693;
double r26695 = r26677 * r26667;
double r26696 = sqrt(r26695);
double r26697 = 2.0;
double r26698 = r26697 * r26663;
double r26699 = sqrt(r26698);
double r26700 = r26696 / r26699;
double r26701 = r26666 * r26700;
double r26702 = r26687 ? r26694 : r26701;
double r26703 = r26674 ? r26685 : r26702;
double r26704 = r26665 ? r26672 : r26703;
return r26704;
}



Bits error versus re



Bits error versus im
Results
if re < -4.019634613598925e+134Initial program 58.4
Taylor expanded around -inf 8.5
Simplified8.5
if -4.019634613598925e+134 < re < -5.906464274638443e-269Initial program 20.0
rmApplied add-sqr-sqrt20.0
Applied sqrt-prod20.1
if -5.906464274638443e-269 < re < 3.6126983408494656e+150Initial program 39.2
rmApplied flip--39.1
Applied associate-*r/39.1
Applied sqrt-div39.3
Simplified29.9
rmApplied sqrt-prod30.0
Applied associate-/l*30.0
Simplified21.1
if 3.6126983408494656e+150 < re Initial program 63.8
rmApplied flip--63.8
Applied associate-*r/63.8
Applied sqrt-div63.8
Simplified49.1
Taylor expanded around inf 20.6
Final simplification18.9
herbie shell --seed 2019208
(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)))))