0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le 9.9876162163965062 \cdot 10^{-278}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\mathsf{hypot}\left(im, re\right) - re\right)}\\
\mathbf{elif}\;re \le 8.65125741163031176 \cdot 10^{177}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{im \cdot 2}{\frac{re + \mathsf{hypot}\left(re, im\right)}{{im}^{\left(\frac{2}{2}\right)}}}}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {im}^{2}}}{\sqrt{re + \mathsf{hypot}\left(re, im\right)}}\\
\end{array}double code(double re, double im) {
return (0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re))));
}
double code(double re, double im) {
double VAR;
if ((re <= 9.987616216396506e-278)) {
VAR = (0.5 * sqrt((2.0 * (hypot(im, re) - re))));
} else {
double VAR_1;
if ((re <= 8.651257411630312e+177)) {
VAR_1 = (0.5 * sqrt(((im * 2.0) / ((re + hypot(re, im)) / pow(im, (2.0 / 2.0))))));
} else {
VAR_1 = (0.5 * (sqrt((2.0 * pow(im, 2.0))) / sqrt((re + hypot(re, im)))));
}
VAR = VAR_1;
}
return VAR;
}



Bits error versus re



Bits error versus im
Results
if re < 9.987616216396506e-278Initial program 31.1
rmApplied +-commutative31.1
Applied hypot-def0.1
if 9.987616216396506e-278 < re < 8.651257411630312e+177Initial program 42.2
rmApplied flip--42.0
Simplified32.8
Simplified31.7
rmApplied sqr-pow31.7
Applied associate-/l*10.5
Applied associate-*r/10.5
Simplified10.5
if 8.651257411630312e+177 < re Initial program 64.0
rmApplied flip--64.0
Simplified49.4
Simplified30.6
rmApplied associate-*r/30.5
Applied sqrt-div18.8
Final simplification6.0
herbie shell --seed 2020078 +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)))))