0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -6.109096128437792147084578893687228243694 \cdot 10^{127}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(-re\right) - re\right)}\\
\mathbf{elif}\;re \le 2.349790356887835779639072642677839447725 \cdot 10^{-295}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{re \cdot re + im \cdot im}\right) \cdot \sqrt[3]{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{elif}\;re \le 2.024649111095880358596936117866742394071 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2} \cdot \left|im\right|}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{re + re}} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r27631 = 0.5;
double r27632 = 2.0;
double r27633 = re;
double r27634 = r27633 * r27633;
double r27635 = im;
double r27636 = r27635 * r27635;
double r27637 = r27634 + r27636;
double r27638 = sqrt(r27637);
double r27639 = r27638 - r27633;
double r27640 = r27632 * r27639;
double r27641 = sqrt(r27640);
double r27642 = r27631 * r27641;
return r27642;
}
double f(double re, double im) {
double r27643 = re;
double r27644 = -6.109096128437792e+127;
bool r27645 = r27643 <= r27644;
double r27646 = 0.5;
double r27647 = 2.0;
double r27648 = -r27643;
double r27649 = r27648 - r27643;
double r27650 = r27647 * r27649;
double r27651 = sqrt(r27650);
double r27652 = r27646 * r27651;
double r27653 = 2.3497903568878358e-295;
bool r27654 = r27643 <= r27653;
double r27655 = r27643 * r27643;
double r27656 = im;
double r27657 = r27656 * r27656;
double r27658 = r27655 + r27657;
double r27659 = cbrt(r27658);
double r27660 = r27659 * r27659;
double r27661 = r27660 * r27659;
double r27662 = sqrt(r27661);
double r27663 = r27662 - r27643;
double r27664 = r27647 * r27663;
double r27665 = sqrt(r27664);
double r27666 = r27646 * r27665;
double r27667 = 2.0246491110958804e+150;
bool r27668 = r27643 <= r27667;
double r27669 = sqrt(r27647);
double r27670 = fabs(r27656);
double r27671 = r27669 * r27670;
double r27672 = sqrt(r27658);
double r27673 = r27672 + r27643;
double r27674 = sqrt(r27673);
double r27675 = r27671 / r27674;
double r27676 = r27646 * r27675;
double r27677 = r27647 * r27657;
double r27678 = sqrt(r27677);
double r27679 = r27643 + r27643;
double r27680 = sqrt(r27679);
double r27681 = r27678 / r27680;
double r27682 = r27681 * r27646;
double r27683 = r27668 ? r27676 : r27682;
double r27684 = r27654 ? r27666 : r27683;
double r27685 = r27645 ? r27652 : r27684;
return r27685;
}



Bits error versus re



Bits error versus im
Results
if re < -6.109096128437792e+127Initial program 56.4
rmApplied add-sqr-sqrt56.4
Applied sqrt-prod56.4
Taylor expanded around -inf 9.2
Simplified9.2
if -6.109096128437792e+127 < re < 2.3497903568878358e-295Initial program 21.1
rmApplied add-cube-cbrt21.4
if 2.3497903568878358e-295 < re < 2.0246491110958804e+150Initial program 39.7
rmApplied flip--39.5
Applied associate-*r/39.5
Applied sqrt-div39.7
Simplified29.6
rmApplied sqrt-prod29.6
Simplified19.9
if 2.0246491110958804e+150 < re Initial program 63.9
rmApplied flip--63.9
Applied associate-*r/63.9
Applied sqrt-div63.9
Simplified51.4
Taylor expanded around inf 20.8
Final simplification18.9
herbie shell --seed 2019212
(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)))))