0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -3.6980740601030615 \cdot 10^{63}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;re \le -3.84643118014252533 \cdot 10^{-178}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\\
\mathbf{elif}\;re \le 1.13670705319239887 \cdot 10^{-287}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-\left(re + im\right)\right)}\\
\mathbf{elif}\;re \le 1.3214275905413451 \cdot 10^{154}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \left(\sqrt{\frac{1}{\sqrt{re \cdot re + im \cdot im} + re}} \cdot \left|im\right|\right)\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im}{2 \cdot \frac{re}{im} + \frac{1}{2} \cdot \frac{im}{re}}}\\
\end{array}double f(double re, double im) {
double r23615 = 0.5;
double r23616 = 2.0;
double r23617 = re;
double r23618 = r23617 * r23617;
double r23619 = im;
double r23620 = r23619 * r23619;
double r23621 = r23618 + r23620;
double r23622 = sqrt(r23621);
double r23623 = r23622 - r23617;
double r23624 = r23616 * r23623;
double r23625 = sqrt(r23624);
double r23626 = r23615 * r23625;
return r23626;
}
double f(double re, double im) {
double r23627 = re;
double r23628 = -3.6980740601030615e+63;
bool r23629 = r23627 <= r23628;
double r23630 = 0.5;
double r23631 = 2.0;
double r23632 = -1.0;
double r23633 = r23632 * r23627;
double r23634 = r23633 - r23627;
double r23635 = r23631 * r23634;
double r23636 = sqrt(r23635);
double r23637 = r23630 * r23636;
double r23638 = -3.8464311801425253e-178;
bool r23639 = r23627 <= r23638;
double r23640 = r23627 * r23627;
double r23641 = im;
double r23642 = r23641 * r23641;
double r23643 = r23640 + r23642;
double r23644 = sqrt(r23643);
double r23645 = r23644 - r23627;
double r23646 = r23631 * r23645;
double r23647 = sqrt(r23646);
double r23648 = r23630 * r23647;
double r23649 = 1.1367070531923989e-287;
bool r23650 = r23627 <= r23649;
double r23651 = r23627 + r23641;
double r23652 = -r23651;
double r23653 = r23631 * r23652;
double r23654 = sqrt(r23653);
double r23655 = r23630 * r23654;
double r23656 = 1.3214275905413451e+154;
bool r23657 = r23627 <= r23656;
double r23658 = sqrt(r23631);
double r23659 = 1.0;
double r23660 = r23644 + r23627;
double r23661 = r23659 / r23660;
double r23662 = sqrt(r23661);
double r23663 = fabs(r23641);
double r23664 = r23662 * r23663;
double r23665 = r23658 * r23664;
double r23666 = r23630 * r23665;
double r23667 = 2.0;
double r23668 = r23627 / r23641;
double r23669 = r23667 * r23668;
double r23670 = 0.5;
double r23671 = r23641 / r23627;
double r23672 = r23670 * r23671;
double r23673 = r23669 + r23672;
double r23674 = r23641 / r23673;
double r23675 = r23631 * r23674;
double r23676 = sqrt(r23675);
double r23677 = r23630 * r23676;
double r23678 = r23657 ? r23666 : r23677;
double r23679 = r23650 ? r23655 : r23678;
double r23680 = r23639 ? r23648 : r23679;
double r23681 = r23629 ? r23637 : r23680;
return r23681;
}



Bits error versus re



Bits error versus im
Results
if re < -3.6980740601030615e+63Initial program 46.0
Taylor expanded around -inf 11.0
if -3.6980740601030615e+63 < re < -3.8464311801425253e-178Initial program 16.5
if -3.8464311801425253e-178 < re < 1.1367070531923989e-287Initial program 28.0
rmApplied flip--29.4
Simplified29.4
Taylor expanded around -inf 33.9
if 1.1367070531923989e-287 < re < 1.3214275905413451e+154Initial program 39.8
rmApplied flip--39.6
Simplified30.8
rmApplied unpow230.8
Applied associate-/l*28.4
rmApplied sqrt-prod28.6
rmApplied div-inv28.6
Applied *-un-lft-identity28.6
Applied times-frac31.0
Applied sqrt-prod29.9
Simplified19.5
if 1.3214275905413451e+154 < re Initial program 64.0
rmApplied flip--64.0
Simplified51.3
rmApplied unpow251.3
Applied associate-/l*50.9
Taylor expanded around inf 21.8
Final simplification19.4
herbie shell --seed 2020064
(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)))))