0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -2.142078331456716064324417880249684721011 \cdot 10^{-307}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\
\mathbf{elif}\;re \le 2.239439368950259898064612718385459890624 \cdot 10^{78}:\\
\;\;\;\;0.5 \cdot \left(\sqrt{2} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im} + re}\right)\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\
\end{array}double f(double re, double im) {
double r267921 = 0.5;
double r267922 = 2.0;
double r267923 = re;
double r267924 = r267923 * r267923;
double r267925 = im;
double r267926 = r267925 * r267925;
double r267927 = r267924 + r267926;
double r267928 = sqrt(r267927);
double r267929 = r267928 + r267923;
double r267930 = r267922 * r267929;
double r267931 = sqrt(r267930);
double r267932 = r267921 * r267931;
return r267932;
}
double f(double re, double im) {
double r267933 = re;
double r267934 = -2.142078331456716e-307;
bool r267935 = r267933 <= r267934;
double r267936 = 0.5;
double r267937 = im;
double r267938 = r267937 * r267937;
double r267939 = 2.0;
double r267940 = r267938 * r267939;
double r267941 = sqrt(r267940);
double r267942 = r267933 * r267933;
double r267943 = r267942 + r267938;
double r267944 = sqrt(r267943);
double r267945 = r267944 - r267933;
double r267946 = sqrt(r267945);
double r267947 = r267941 / r267946;
double r267948 = r267936 * r267947;
double r267949 = 2.23943936895026e+78;
bool r267950 = r267933 <= r267949;
double r267951 = sqrt(r267939);
double r267952 = r267944 + r267933;
double r267953 = sqrt(r267952);
double r267954 = r267951 * r267953;
double r267955 = r267936 * r267954;
double r267956 = r267933 + r267933;
double r267957 = r267939 * r267956;
double r267958 = sqrt(r267957);
double r267959 = r267936 * r267958;
double r267960 = r267950 ? r267955 : r267959;
double r267961 = r267935 ? r267948 : r267960;
return r267961;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.2 |
|---|---|
| Target | 33.3 |
| Herbie | 26.0 |
if re < -2.142078331456716e-307Initial program 44.7
rmApplied flip-+44.5
Applied associate-*r/44.5
Applied sqrt-div44.6
Simplified33.9
if -2.142078331456716e-307 < re < 2.23943936895026e+78Initial program 22.4
rmApplied sqrt-prod22.7
if 2.23943936895026e+78 < re Initial program 48.4
Taylor expanded around inf 10.2
Final simplification26.0
herbie shell --seed 2019351
(FPCore (re im)
:name "math.sqrt on complex, real part"
:precision binary64
:herbie-target
(if (< re 0.0) (* 0.5 (* (sqrt 2) (sqrt (/ (* im im) (- (sqrt (+ (* re re) (* im im))) re))))) (* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))
(* 0.5 (sqrt (* 2 (+ (sqrt (+ (* re re) (* im im))) re)))))