0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le 6.83037648753660603 \cdot 10^{-73} \lor \neg \left(re \le 1.969774278625561 \cdot 10^{-16}\right):\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(1 \cdot \left(\mathsf{hypot}\left(re, im\right) - re\right)\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 r18361 = 0.5;
double r18362 = 2.0;
double r18363 = re;
double r18364 = r18363 * r18363;
double r18365 = im;
double r18366 = r18365 * r18365;
double r18367 = r18364 + r18366;
double r18368 = sqrt(r18367);
double r18369 = r18368 - r18363;
double r18370 = r18362 * r18369;
double r18371 = sqrt(r18370);
double r18372 = r18361 * r18371;
return r18372;
}
double f(double re, double im) {
double r18373 = re;
double r18374 = 6.830376487536606e-73;
bool r18375 = r18373 <= r18374;
double r18376 = 1.969774278625561e-16;
bool r18377 = r18373 <= r18376;
double r18378 = !r18377;
bool r18379 = r18375 || r18378;
double r18380 = 0.5;
double r18381 = 2.0;
double r18382 = 1.0;
double r18383 = im;
double r18384 = hypot(r18373, r18383);
double r18385 = r18384 - r18373;
double r18386 = r18382 * r18385;
double r18387 = r18381 * r18386;
double r18388 = sqrt(r18387);
double r18389 = r18380 * r18388;
double r18390 = 2.0;
double r18391 = pow(r18383, r18390);
double r18392 = 0.0;
double r18393 = r18391 + r18392;
double r18394 = r18373 + r18384;
double r18395 = r18393 / r18394;
double r18396 = r18381 * r18395;
double r18397 = sqrt(r18396);
double r18398 = r18380 * r18397;
double r18399 = r18379 ? r18389 : r18398;
return r18399;
}



Bits error versus re



Bits error versus im
Results
if re < 6.830376487536606e-73 or 1.969774278625561e-16 < re Initial program 38.2
rmApplied *-un-lft-identity38.2
Applied *-un-lft-identity38.2
Applied distribute-lft-out--38.2
Simplified12.2
if 6.830376487536606e-73 < re < 1.969774278625561e-16Initial program 42.5
rmApplied flip--42.5
Simplified31.6
Simplified31.6
Final simplification13.2
herbie shell --seed 2020027 +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)))))