0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le 1.9670001249123335 \cdot 10^{-147}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\mathsf{hypot}\left(re, im\right) - re\right) + 0\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{{im}^{2} + 0}{re + \mathsf{hypot}\left(re, im\right)}}\\
\end{array}double f(double re, double im) {
double r20233 = 0.5;
double r20234 = 2.0;
double r20235 = re;
double r20236 = r20235 * r20235;
double r20237 = im;
double r20238 = r20237 * r20237;
double r20239 = r20236 + r20238;
double r20240 = sqrt(r20239);
double r20241 = r20240 - r20235;
double r20242 = r20234 * r20241;
double r20243 = sqrt(r20242);
double r20244 = r20233 * r20243;
return r20244;
}
double f(double re, double im) {
double r20245 = re;
double r20246 = 1.9670001249123335e-147;
bool r20247 = r20245 <= r20246;
double r20248 = 0.5;
double r20249 = 2.0;
double r20250 = im;
double r20251 = hypot(r20245, r20250);
double r20252 = r20251 - r20245;
double r20253 = 0.0;
double r20254 = r20252 + r20253;
double r20255 = r20249 * r20254;
double r20256 = sqrt(r20255);
double r20257 = r20248 * r20256;
double r20258 = 2.0;
double r20259 = pow(r20250, r20258);
double r20260 = r20259 + r20253;
double r20261 = r20245 + r20251;
double r20262 = r20260 / r20261;
double r20263 = r20249 * r20262;
double r20264 = sqrt(r20263);
double r20265 = r20248 * r20264;
double r20266 = r20247 ? r20257 : r20265;
return r20266;
}



Bits error versus re



Bits error versus im
Results
if re < 1.9670001249123335e-147Initial program 30.7
rmApplied add-cube-cbrt30.8
Applied add-sqr-sqrt30.8
Applied sqrt-prod30.9
Applied prod-diff30.9
Simplified1.7
Simplified1.7
if 1.9670001249123335e-147 < re Initial program 51.1
rmApplied flip--51.1
Simplified37.2
Simplified31.4
Final simplification12.5
herbie shell --seed 2020035 +o rules:numerics
(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)))))