0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.617907908010069025826796894817450794034 \cdot 10^{120}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le 4.297855652337577417946883332120350061642 \cdot 10^{-301}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im} - re} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} - re}\right)}\\
\mathbf{elif}\;re \le 2.268707743098186245908624100287446499225 \cdot 10^{-218}:\\
\;\;\;\;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 r15156 = 0.5;
double r15157 = 2.0;
double r15158 = re;
double r15159 = r15158 * r15158;
double r15160 = im;
double r15161 = r15160 * r15160;
double r15162 = r15159 + r15161;
double r15163 = sqrt(r15162);
double r15164 = r15163 - r15158;
double r15165 = r15157 * r15164;
double r15166 = sqrt(r15165);
double r15167 = r15156 * r15166;
return r15167;
}
double f(double re, double im) {
double r15168 = re;
double r15169 = -1.617907908010069e+120;
bool r15170 = r15168 <= r15169;
double r15171 = 0.5;
double r15172 = 2.0;
double r15173 = -2.0;
double r15174 = r15173 * r15168;
double r15175 = r15172 * r15174;
double r15176 = sqrt(r15175);
double r15177 = r15171 * r15176;
double r15178 = 4.2978556523375774e-301;
bool r15179 = r15168 <= r15178;
double r15180 = r15168 * r15168;
double r15181 = im;
double r15182 = r15181 * r15181;
double r15183 = r15180 + r15182;
double r15184 = sqrt(r15183);
double r15185 = r15184 - r15168;
double r15186 = sqrt(r15185);
double r15187 = r15186 * r15186;
double r15188 = r15172 * r15187;
double r15189 = sqrt(r15188);
double r15190 = r15171 * r15189;
double r15191 = 2.268707743098186e-218;
bool r15192 = r15168 <= r15191;
double r15193 = r15181 - r15168;
double r15194 = r15172 * r15193;
double r15195 = sqrt(r15194);
double r15196 = r15171 * r15195;
double r15197 = 0.0;
double r15198 = r15182 + r15197;
double r15199 = r15168 + r15184;
double r15200 = r15198 / r15199;
double r15201 = r15172 * r15200;
double r15202 = sqrt(r15201);
double r15203 = r15171 * r15202;
double r15204 = r15192 ? r15196 : r15203;
double r15205 = r15179 ? r15190 : r15204;
double r15206 = r15170 ? r15177 : r15205;
return r15206;
}



Bits error versus re



Bits error versus im
Results
if re < -1.617907908010069e+120Initial program 54.3
Taylor expanded around -inf 9.8
if -1.617907908010069e+120 < re < 4.2978556523375774e-301Initial program 20.2
rmApplied add-sqr-sqrt20.3
if 4.2978556523375774e-301 < re < 2.268707743098186e-218Initial program 30.8
Taylor expanded around 0 34.6
if 2.268707743098186e-218 < re Initial program 48.9
rmApplied add-sqr-sqrt48.9
Applied sqrt-prod49.8
rmApplied flip--49.7
Simplified37.1
Simplified37.1
Final simplification27.0
herbie shell --seed 2019346
(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)))))