0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -8.615973159790100816135112956922113830758 \cdot 10^{-204}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le 2.88234410399163811959624616338485820472 \cdot 10^{143}:\\
\;\;\;\;0.5 \cdot \frac{\left|im\right| \cdot \sqrt{2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \frac{\left|im\right|}{\sqrt{2 \cdot re}}\right)\\
\end{array}double f(double re, double im) {
double r25848 = 0.5;
double r25849 = 2.0;
double r25850 = re;
double r25851 = r25850 * r25850;
double r25852 = im;
double r25853 = r25852 * r25852;
double r25854 = r25851 + r25853;
double r25855 = sqrt(r25854);
double r25856 = r25855 - r25850;
double r25857 = r25849 * r25856;
double r25858 = sqrt(r25857);
double r25859 = r25848 * r25858;
return r25859;
}
double f(double re, double im) {
double r25860 = re;
double r25861 = -8.615973159790101e-204;
bool r25862 = r25860 <= r25861;
double r25863 = 0.5;
double r25864 = 2.0;
double r25865 = -2.0;
double r25866 = r25865 * r25860;
double r25867 = r25864 * r25866;
double r25868 = sqrt(r25867);
double r25869 = r25863 * r25868;
double r25870 = 2.882344103991638e+143;
bool r25871 = r25860 <= r25870;
double r25872 = im;
double r25873 = fabs(r25872);
double r25874 = sqrt(r25864);
double r25875 = r25873 * r25874;
double r25876 = r25860 * r25860;
double r25877 = r25872 * r25872;
double r25878 = r25876 + r25877;
double r25879 = sqrt(r25878);
double r25880 = r25879 + r25860;
double r25881 = sqrt(r25880);
double r25882 = r25875 / r25881;
double r25883 = r25863 * r25882;
double r25884 = 2.0;
double r25885 = r25884 * r25860;
double r25886 = sqrt(r25885);
double r25887 = r25873 / r25886;
double r25888 = r25874 * r25887;
double r25889 = r25863 * r25888;
double r25890 = r25871 ? r25883 : r25889;
double r25891 = r25862 ? r25869 : r25890;
return r25891;
}



Bits error versus re



Bits error versus im
Results
if re < -8.615973159790101e-204Initial program 31.9
Taylor expanded around -inf 25.2
if -8.615973159790101e-204 < re < 2.882344103991638e+143Initial program 37.5
rmApplied flip--37.6
Applied associate-*r/37.6
Applied sqrt-div37.9
Simplified29.5
rmApplied *-un-lft-identity29.5
Applied sqrt-prod29.5
Applied sqrt-prod29.6
Applied times-frac29.6
Simplified29.6
Simplified22.4
rmApplied associate-*r/22.4
Simplified22.4
if 2.882344103991638e+143 < re Initial program 63.1
rmApplied flip--63.1
Applied associate-*r/63.1
Applied sqrt-div63.1
Simplified49.3
rmApplied *-un-lft-identity49.3
Applied sqrt-prod49.3
Applied sqrt-prod49.3
Applied times-frac49.3
Simplified49.3
Simplified48.2
Taylor expanded around inf 9.0
Final simplification21.8
herbie shell --seed 2019323
(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)))))