0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.4667592323261061 \cdot 10^{131}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(-2 \cdot re\right)}\\
\mathbf{elif}\;re \le -5.17210716716597531 \cdot 10^{-306}:\\
\;\;\;\;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}}{re + \sqrt{re \cdot re + im \cdot im}}}\\
\end{array}double f(double re, double im) {
double r15049 = 0.5;
double r15050 = 2.0;
double r15051 = re;
double r15052 = r15051 * r15051;
double r15053 = im;
double r15054 = r15053 * r15053;
double r15055 = r15052 + r15054;
double r15056 = sqrt(r15055);
double r15057 = r15056 - r15051;
double r15058 = r15050 * r15057;
double r15059 = sqrt(r15058);
double r15060 = r15049 * r15059;
return r15060;
}
double f(double re, double im) {
double r15061 = re;
double r15062 = -1.4667592323261061e+131;
bool r15063 = r15061 <= r15062;
double r15064 = 0.5;
double r15065 = 2.0;
double r15066 = -2.0;
double r15067 = r15066 * r15061;
double r15068 = r15065 * r15067;
double r15069 = sqrt(r15068);
double r15070 = r15064 * r15069;
double r15071 = -5.172107167165975e-306;
bool r15072 = r15061 <= r15071;
double r15073 = r15061 * r15061;
double r15074 = im;
double r15075 = r15074 * r15074;
double r15076 = r15073 + r15075;
double r15077 = sqrt(r15076);
double r15078 = sqrt(r15077);
double r15079 = r15078 * r15078;
double r15080 = r15079 - r15061;
double r15081 = r15065 * r15080;
double r15082 = sqrt(r15081);
double r15083 = r15064 * r15082;
double r15084 = 2.0;
double r15085 = pow(r15074, r15084);
double r15086 = r15061 + r15077;
double r15087 = r15085 / r15086;
double r15088 = r15065 * r15087;
double r15089 = sqrt(r15088);
double r15090 = r15064 * r15089;
double r15091 = r15072 ? r15083 : r15090;
double r15092 = r15063 ? r15070 : r15091;
return r15092;
}



Bits error versus re



Bits error versus im
Results
if re < -1.4667592323261061e+131Initial program 58.9
Taylor expanded around -inf 8.9
if -1.4667592323261061e+131 < re < -5.172107167165975e-306Initial program 20.1
rmApplied add-exp-log22.4
rmApplied add-sqr-sqrt22.4
Applied sqrt-prod22.4
Applied log-prod22.4
Applied exp-sum22.4
Simplified21.9
Simplified20.2
if -5.172107167165975e-306 < re Initial program 45.7
rmApplied add-exp-log48.0
rmApplied flip--47.9
Simplified37.2
Simplified35.9
Final simplification26.3
herbie shell --seed 2020027
(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)))))