0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -6.56236824367744518 \cdot 10^{105}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-1 \cdot re - re\right)}\\
\mathbf{elif}\;re \le -2.30717077831923979 \cdot 10^{-293}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}} \cdot {\left(\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im}}}\right)}^{3} - re\right)}\\
\mathbf{elif}\;re \le 9.5166256281778276 \cdot 10^{-220}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im + 0}{re + \sqrt{re \cdot re + im \cdot im}}}\\
\end{array}double f(double re, double im) {
double r17715 = 0.5;
double r17716 = 2.0;
double r17717 = re;
double r17718 = r17717 * r17717;
double r17719 = im;
double r17720 = r17719 * r17719;
double r17721 = r17718 + r17720;
double r17722 = sqrt(r17721);
double r17723 = r17722 - r17717;
double r17724 = r17716 * r17723;
double r17725 = sqrt(r17724);
double r17726 = r17715 * r17725;
return r17726;
}
double f(double re, double im) {
double r17727 = re;
double r17728 = -6.562368243677445e+105;
bool r17729 = r17727 <= r17728;
double r17730 = 0.5;
double r17731 = 2.0;
double r17732 = -1.0;
double r17733 = r17732 * r17727;
double r17734 = r17733 - r17727;
double r17735 = r17731 * r17734;
double r17736 = sqrt(r17735);
double r17737 = r17730 * r17736;
double r17738 = -2.3071707783192398e-293;
bool r17739 = r17727 <= r17738;
double r17740 = r17727 * r17727;
double r17741 = im;
double r17742 = r17741 * r17741;
double r17743 = r17740 + r17742;
double r17744 = sqrt(r17743);
double r17745 = sqrt(r17744);
double r17746 = sqrt(r17745);
double r17747 = 3.0;
double r17748 = pow(r17746, r17747);
double r17749 = r17746 * r17748;
double r17750 = r17749 - r17727;
double r17751 = r17731 * r17750;
double r17752 = sqrt(r17751);
double r17753 = r17730 * r17752;
double r17754 = 9.516625628177828e-220;
bool r17755 = r17727 <= r17754;
double r17756 = r17741 - r17727;
double r17757 = r17731 * r17756;
double r17758 = sqrt(r17757);
double r17759 = r17730 * r17758;
double r17760 = 0.0;
double r17761 = r17742 + r17760;
double r17762 = r17727 + r17744;
double r17763 = r17761 / r17762;
double r17764 = r17731 * r17763;
double r17765 = sqrt(r17764);
double r17766 = r17730 * r17765;
double r17767 = r17755 ? r17759 : r17766;
double r17768 = r17739 ? r17753 : r17767;
double r17769 = r17729 ? r17737 : r17768;
return r17769;
}



Bits error versus re



Bits error versus im
Results
if re < -6.562368243677445e+105Initial program 51.3
Taylor expanded around -inf 9.4
if -6.562368243677445e+105 < re < -2.3071707783192398e-293Initial program 19.8
rmApplied add-sqr-sqrt19.8
Applied sqrt-prod19.9
rmApplied add-sqr-sqrt19.9
Applied sqrt-prod19.9
Applied sqrt-prod19.9
Applied associate-*l*19.9
Simplified20.0
if -2.3071707783192398e-293 < re < 9.516625628177828e-220Initial program 31.8
Taylor expanded around 0 32.7
if 9.516625628177828e-220 < re Initial program 48.4
rmApplied add-sqr-sqrt48.4
Applied sqrt-prod49.0
rmApplied flip--48.9
Simplified36.3
Simplified36.2
Final simplification26.2
herbie shell --seed 2020035
(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)))))