0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;re \le 1.0542686008392895 \cdot 10^{-44} \lor \neg \left(re \le 6.3965664142754167 \cdot 10^{-5} \lor \neg \left(re \le 1.0003561765365922 \cdot 10^{202}\right)\right):\\
\;\;\;\;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 r20933 = 0.5;
double r20934 = 2.0;
double r20935 = re;
double r20936 = r20935 * r20935;
double r20937 = im;
double r20938 = r20937 * r20937;
double r20939 = r20936 + r20938;
double r20940 = sqrt(r20939);
double r20941 = r20940 - r20935;
double r20942 = r20934 * r20941;
double r20943 = sqrt(r20942);
double r20944 = r20933 * r20943;
return r20944;
}
double f(double re, double im) {
double r20945 = re;
double r20946 = 1.0542686008392895e-44;
bool r20947 = r20945 <= r20946;
double r20948 = 6.396566414275417e-05;
bool r20949 = r20945 <= r20948;
double r20950 = 1.0003561765365922e+202;
bool r20951 = r20945 <= r20950;
double r20952 = !r20951;
bool r20953 = r20949 || r20952;
double r20954 = !r20953;
bool r20955 = r20947 || r20954;
double r20956 = 0.5;
double r20957 = 2.0;
double r20958 = im;
double r20959 = hypot(r20945, r20958);
double r20960 = r20959 - r20945;
double r20961 = 0.0;
double r20962 = r20960 + r20961;
double r20963 = r20957 * r20962;
double r20964 = sqrt(r20963);
double r20965 = r20956 * r20964;
double r20966 = 2.0;
double r20967 = pow(r20958, r20966);
double r20968 = r20967 + r20961;
double r20969 = r20945 + r20959;
double r20970 = r20968 / r20969;
double r20971 = r20957 * r20970;
double r20972 = sqrt(r20971);
double r20973 = r20956 * r20972;
double r20974 = r20955 ? r20965 : r20973;
return r20974;
}



Bits error versus re



Bits error versus im
Results
if re < 1.0542686008392895e-44 or 6.396566414275417e-05 < re < 1.0003561765365922e+202Initial program 35.9
rmApplied add-cube-cbrt36.5
Applied add-sqr-sqrt36.5
Applied sqrt-prod36.6
Applied prod-diff36.7
Simplified11.1
Simplified10.1
if 1.0542686008392895e-44 < re < 6.396566414275417e-05 or 1.0003561765365922e+202 < re Initial program 58.8
rmApplied flip--58.8
Simplified44.7
Simplified30.2
Final simplification12.4
herbie shell --seed 2020100 +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)))))