0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}\begin{array}{l}
\mathbf{if}\;\sqrt{re \cdot re + im \cdot im} - re \le 0.0:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{{im}^{2} \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} + re}}\\
\mathbf{elif}\;\sqrt{re \cdot re + im \cdot im} - re \le 5.060064786484086927491814603186540752799 \cdot 10^{146}:\\
\;\;\;\;\sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\end{array}double f(double re, double im) {
double r22954 = 0.5;
double r22955 = 2.0;
double r22956 = re;
double r22957 = r22956 * r22956;
double r22958 = im;
double r22959 = r22958 * r22958;
double r22960 = r22957 + r22959;
double r22961 = sqrt(r22960);
double r22962 = r22961 - r22956;
double r22963 = r22955 * r22962;
double r22964 = sqrt(r22963);
double r22965 = r22954 * r22964;
return r22965;
}
double f(double re, double im) {
double r22966 = re;
double r22967 = r22966 * r22966;
double r22968 = im;
double r22969 = r22968 * r22968;
double r22970 = r22967 + r22969;
double r22971 = sqrt(r22970);
double r22972 = r22971 - r22966;
double r22973 = 0.0;
bool r22974 = r22972 <= r22973;
double r22975 = 0.5;
double r22976 = 2.0;
double r22977 = pow(r22968, r22976);
double r22978 = 2.0;
double r22979 = r22977 * r22978;
double r22980 = sqrt(r22979);
double r22981 = r22971 + r22966;
double r22982 = sqrt(r22981);
double r22983 = r22980 / r22982;
double r22984 = r22975 * r22983;
double r22985 = 5.060064786484087e+146;
bool r22986 = r22972 <= r22985;
double r22987 = r22978 * r22972;
double r22988 = sqrt(r22987);
double r22989 = r22988 * r22975;
double r22990 = r22968 - r22966;
double r22991 = r22978 * r22990;
double r22992 = sqrt(r22991);
double r22993 = r22975 * r22992;
double r22994 = r22986 ? r22989 : r22993;
double r22995 = r22974 ? r22984 : r22994;
return r22995;
}



Bits error versus re



Bits error versus im
Results
if (- (sqrt (+ (* re re) (* im im))) re) < 0.0Initial program 58.3
rmApplied add-sqr-sqrt58.3
Applied sqrt-prod60.6
rmApplied *-un-lft-identity60.6
Applied sqrt-prod60.6
Applied sqrt-prod60.6
Applied associate-*l*60.6
Simplified58.3
rmApplied flip--57.7
Applied associate-*r/57.7
Applied sqrt-div57.7
Simplified33.4
Simplified33.4
if 0.0 < (- (sqrt (+ (* re re) (* im im))) re) < 5.060064786484087e+146Initial program 4.5
rmApplied add-sqr-sqrt4.5
Applied sqrt-prod4.6
rmApplied *-un-lft-identity4.6
Applied sqrt-prod4.6
Applied sqrt-prod4.6
Applied associate-*l*4.6
Simplified4.5
if 5.060064786484087e+146 < (- (sqrt (+ (* re re) (* im im))) re) Initial program 62.1
Taylor expanded around 0 44.7
Final simplification26.6
herbie shell --seed 2019303
(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)))))