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.854335289020707 \cdot 10^{-144}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)} \cdot 0.5\\
\mathbf{elif}\;im \le -6.24220698546632 \cdot 10^{-279}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 4.714591495324224 \cdot 10^{-286}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(\sqrt{im \cdot im + re \cdot re} - re\right)} \cdot 0.5\\
\mathbf{elif}\;im \le 2.7223497161661665 \cdot 10^{-265}:\\
\;\;\;\;0\\
\mathbf{elif}\;im \le 1.4179178681524915 \cdot 10^{-154}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;im \le 5.455674444836594 \cdot 10^{+103}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} - re\right) \cdot 2.0}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r379777 = 0.5;
double r379778 = 2.0;
double r379779 = re;
double r379780 = r379779 * r379779;
double r379781 = im;
double r379782 = r379781 * r379781;
double r379783 = r379780 + r379782;
double r379784 = sqrt(r379783);
double r379785 = r379784 - r379779;
double r379786 = r379778 * r379785;
double r379787 = sqrt(r379786);
double r379788 = r379777 * r379787;
return r379788;
}
double f(double re, double im) {
double r379789 = im;
double r379790 = -3.854335289020707e-144;
bool r379791 = r379789 <= r379790;
double r379792 = 2.0;
double r379793 = r379789 * r379789;
double r379794 = re;
double r379795 = r379794 * r379794;
double r379796 = r379793 + r379795;
double r379797 = sqrt(r379796);
double r379798 = r379797 - r379794;
double r379799 = r379792 * r379798;
double r379800 = sqrt(r379799);
double r379801 = 0.5;
double r379802 = r379800 * r379801;
double r379803 = -6.24220698546632e-279;
bool r379804 = r379789 <= r379803;
double r379805 = -2.0;
double r379806 = r379805 * r379794;
double r379807 = r379792 * r379806;
double r379808 = sqrt(r379807);
double r379809 = r379801 * r379808;
double r379810 = 4.714591495324224e-286;
bool r379811 = r379789 <= r379810;
double r379812 = 2.7223497161661665e-265;
bool r379813 = r379789 <= r379812;
double r379814 = 0.0;
double r379815 = 1.4179178681524915e-154;
bool r379816 = r379789 <= r379815;
double r379817 = 5.455674444836594e+103;
bool r379818 = r379789 <= r379817;
double r379819 = sqrt(r379797);
double r379820 = r379819 * r379819;
double r379821 = r379820 - r379794;
double r379822 = r379821 * r379792;
double r379823 = sqrt(r379822);
double r379824 = r379801 * r379823;
double r379825 = r379789 - r379794;
double r379826 = r379792 * r379825;
double r379827 = sqrt(r379826);
double r379828 = r379801 * r379827;
double r379829 = r379818 ? r379824 : r379828;
double r379830 = r379816 ? r379809 : r379829;
double r379831 = r379813 ? r379814 : r379830;
double r379832 = r379811 ? r379802 : r379831;
double r379833 = r379804 ? r379809 : r379832;
double r379834 = r379791 ? r379802 : r379833;
return r379834;
}



Bits error versus re



Bits error versus im
Results
if im < -3.854335289020707e-144 or -6.24220698546632e-279 < im < 4.714591495324224e-286Initial program 36.2
if -3.854335289020707e-144 < im < -6.24220698546632e-279 or 2.7223497161661665e-265 < im < 1.4179178681524915e-154Initial program 42.9
Taylor expanded around -inf 35.8
if 4.714591495324224e-286 < im < 2.7223497161661665e-265Initial program 37.0
Taylor expanded around inf 48.7
if 1.4179178681524915e-154 < im < 5.455674444836594e+103Initial program 24.6
rmApplied add-sqr-sqrt24.6
Applied sqrt-prod24.7
if 5.455674444836594e+103 < im Initial program 50.2
Taylor expanded around 0 9.9
Final simplification29.5
herbie shell --seed 2019155
(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)))))