0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -2.60085321524529635506480666887989434939 \cdot 10^{111}:\\
\;\;\;\;\sqrt{\left(-2 \cdot re\right) \cdot 2} \cdot 0.5\\
\mathbf{elif}\;re \le 1.569656924578216529544264149613932691613 \cdot 10^{-300}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\sqrt{\sqrt{\sqrt{im \cdot im + re \cdot re}}} \cdot \left(\sqrt{\sqrt{\sqrt{im \cdot im + re \cdot re}}} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}}\right) - re\right) \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{\sqrt{im \cdot im + re \cdot re} + re}}\\
\end{array}double f(double re, double im) {
double r934059 = 0.5;
double r934060 = 2.0;
double r934061 = re;
double r934062 = r934061 * r934061;
double r934063 = im;
double r934064 = r934063 * r934063;
double r934065 = r934062 + r934064;
double r934066 = sqrt(r934065);
double r934067 = r934066 - r934061;
double r934068 = r934060 * r934067;
double r934069 = sqrt(r934068);
double r934070 = r934059 * r934069;
return r934070;
}
double f(double re, double im) {
double r934071 = re;
double r934072 = -2.6008532152452964e+111;
bool r934073 = r934071 <= r934072;
double r934074 = -2.0;
double r934075 = r934074 * r934071;
double r934076 = 2.0;
double r934077 = r934075 * r934076;
double r934078 = sqrt(r934077);
double r934079 = 0.5;
double r934080 = r934078 * r934079;
double r934081 = 1.5696569245782165e-300;
bool r934082 = r934071 <= r934081;
double r934083 = im;
double r934084 = r934083 * r934083;
double r934085 = r934071 * r934071;
double r934086 = r934084 + r934085;
double r934087 = sqrt(r934086);
double r934088 = sqrt(r934087);
double r934089 = sqrt(r934088);
double r934090 = r934089 * r934088;
double r934091 = r934089 * r934090;
double r934092 = r934091 - r934071;
double r934093 = r934092 * r934076;
double r934094 = sqrt(r934093);
double r934095 = r934079 * r934094;
double r934096 = r934076 * r934084;
double r934097 = sqrt(r934096);
double r934098 = r934087 + r934071;
double r934099 = sqrt(r934098);
double r934100 = r934097 / r934099;
double r934101 = r934079 * r934100;
double r934102 = r934082 ? r934095 : r934101;
double r934103 = r934073 ? r934080 : r934102;
return r934103;
}



Bits error versus re



Bits error versus im
Results
if re < -2.6008532152452964e+111Initial program 53.2
Taylor expanded around -inf 9.0
if -2.6008532152452964e+111 < re < 1.5696569245782165e-300Initial program 21.8
rmApplied add-sqr-sqrt21.8
Applied sqrt-prod21.8
rmApplied add-sqr-sqrt21.8
Applied sqrt-prod21.8
Applied sqrt-prod21.9
Applied associate-*r*21.9
if 1.5696569245782165e-300 < re Initial program 45.3
rmApplied flip--45.2
Applied associate-*r/45.2
Applied sqrt-div45.3
Simplified34.0
Final simplification25.8
herbie shell --seed 2019168
(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)))))