0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -2.47409571178928762 \cdot 10^{117}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -5.28965875824807 \cdot 10^{-310}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2}}{\sqrt{re \cdot re + im \cdot im} + re}}\\
\end{array}double f(double re, double im) {
double r23866 = 0.5;
double r23867 = 2.0;
double r23868 = re;
double r23869 = r23868 * r23868;
double r23870 = im;
double r23871 = r23870 * r23870;
double r23872 = r23869 + r23871;
double r23873 = sqrt(r23872);
double r23874 = r23873 - r23868;
double r23875 = r23867 * r23874;
double r23876 = sqrt(r23875);
double r23877 = r23866 * r23876;
return r23877;
}
double f(double re, double im) {
double r23878 = re;
double r23879 = -2.4740957117892876e+117;
bool r23880 = r23878 <= r23879;
double r23881 = 0.5;
double r23882 = 2.0;
double r23883 = -2.0;
double r23884 = r23883 * r23878;
double r23885 = r23882 * r23884;
double r23886 = sqrt(r23885);
double r23887 = r23881 * r23886;
double r23888 = -5.28965875824807e-310;
bool r23889 = r23878 <= r23888;
double r23890 = r23878 * r23878;
double r23891 = im;
double r23892 = r23891 * r23891;
double r23893 = r23890 + r23892;
double r23894 = sqrt(r23893);
double r23895 = sqrt(r23894);
double r23896 = r23895 * r23895;
double r23897 = r23896 - r23878;
double r23898 = r23882 * r23897;
double r23899 = sqrt(r23898);
double r23900 = r23881 * r23899;
double r23901 = 2.0;
double r23902 = pow(r23891, r23901);
double r23903 = r23894 + r23878;
double r23904 = r23902 / r23903;
double r23905 = r23882 * r23904;
double r23906 = sqrt(r23905);
double r23907 = r23881 * r23906;
double r23908 = r23889 ? r23900 : r23907;
double r23909 = r23880 ? r23887 : r23908;
return r23909;
}



Bits error versus re



Bits error versus im
Results
if re < -2.4740957117892876e+117Initial program 55.4
Taylor expanded around -inf 9.4
if -2.4740957117892876e+117 < re < -5.28965875824807e-310Initial program 20.7
rmApplied add-sqr-sqrt20.7
Applied sqrt-prod20.7
if -5.28965875824807e-310 < re Initial program 44.6
rmApplied flip--44.5
Simplified35.1
Final simplification26.2
herbie shell --seed 2019198
(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)))))