0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.369499690488931210940314873390714060144 \cdot 10^{154}:\\
\;\;\;\;\frac{\sqrt{2 \cdot \left(im \cdot im\right)}}{\sqrt{-2 \cdot re}} \cdot 0.5\\
\mathbf{elif}\;re \le 2.059571469999201499073172710204654392749 \cdot 10^{-305}:\\
\;\;\;\;\left(\frac{\left|im\right|}{\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}} \cdot \frac{\sqrt{2}}{\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\right) \cdot 0.5\\
\mathbf{elif}\;re \le 6.557741771668357414125326525668957010105 \cdot 10^{115}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + \sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}}\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\left(re + re\right) \cdot 2} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r9374939 = 0.5;
double r9374940 = 2.0;
double r9374941 = re;
double r9374942 = r9374941 * r9374941;
double r9374943 = im;
double r9374944 = r9374943 * r9374943;
double r9374945 = r9374942 + r9374944;
double r9374946 = sqrt(r9374945);
double r9374947 = r9374946 + r9374941;
double r9374948 = r9374940 * r9374947;
double r9374949 = sqrt(r9374948);
double r9374950 = r9374939 * r9374949;
return r9374950;
}
double f(double re, double im) {
double r9374951 = re;
double r9374952 = -1.3694996904889312e+154;
bool r9374953 = r9374951 <= r9374952;
double r9374954 = 2.0;
double r9374955 = im;
double r9374956 = r9374955 * r9374955;
double r9374957 = r9374954 * r9374956;
double r9374958 = sqrt(r9374957);
double r9374959 = -2.0;
double r9374960 = r9374959 * r9374951;
double r9374961 = sqrt(r9374960);
double r9374962 = r9374958 / r9374961;
double r9374963 = 0.5;
double r9374964 = r9374962 * r9374963;
double r9374965 = 2.0595714699992015e-305;
bool r9374966 = r9374951 <= r9374965;
double r9374967 = fabs(r9374955);
double r9374968 = r9374951 * r9374951;
double r9374969 = r9374968 + r9374956;
double r9374970 = sqrt(r9374969);
double r9374971 = r9374970 - r9374951;
double r9374972 = sqrt(r9374971);
double r9374973 = sqrt(r9374972);
double r9374974 = r9374967 / r9374973;
double r9374975 = sqrt(r9374954);
double r9374976 = r9374975 / r9374973;
double r9374977 = r9374974 * r9374976;
double r9374978 = r9374977 * r9374963;
double r9374979 = 6.557741771668357e+115;
bool r9374980 = r9374951 <= r9374979;
double r9374981 = sqrt(r9374970);
double r9374982 = r9374981 * r9374981;
double r9374983 = r9374951 + r9374982;
double r9374984 = r9374954 * r9374983;
double r9374985 = sqrt(r9374984);
double r9374986 = r9374963 * r9374985;
double r9374987 = r9374951 + r9374951;
double r9374988 = r9374987 * r9374954;
double r9374989 = sqrt(r9374988);
double r9374990 = r9374989 * r9374963;
double r9374991 = r9374980 ? r9374986 : r9374990;
double r9374992 = r9374966 ? r9374978 : r9374991;
double r9374993 = r9374953 ? r9374964 : r9374992;
return r9374993;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.5 |
|---|---|
| Target | 33.6 |
| Herbie | 18.8 |
if re < -1.3694996904889312e+154Initial program 64.0
rmApplied flip-+64.0
Applied associate-*r/64.0
Applied sqrt-div64.0
Simplified50.2
Taylor expanded around -inf 19.8
if -1.3694996904889312e+154 < re < 2.0595714699992015e-305Initial program 40.4
rmApplied flip-+40.2
Applied associate-*r/40.2
Applied sqrt-div40.3
Simplified30.5
rmApplied add-sqr-sqrt30.5
Applied sqrt-prod30.6
Applied sqrt-prod30.6
Applied times-frac30.6
Simplified21.0
if 2.0595714699992015e-305 < re < 6.557741771668357e+115Initial program 20.0
rmApplied add-sqr-sqrt20.0
Applied sqrt-prod20.1
if 6.557741771668357e+115 < re Initial program 54.4
Taylor expanded around inf 10.0
Final simplification18.8
herbie shell --seed 2019192
(FPCore (re im)
:name "math.sqrt on complex, real part"
:herbie-target
(if (< re 0.0) (* 0.5 (* (sqrt 2.0) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))
(* 0.5 (sqrt (* 2.0 (+ (sqrt (+ (* re re) (* im im))) re)))))