0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;im \le -2.400647882280174 \cdot 10^{+136}:\\
\;\;\;\;\sqrt{\left(re - im\right) \cdot 2.0} \cdot 0.5\\
\mathbf{elif}\;im \le -6.74361552556549 \cdot 10^{-164}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \sqrt{\left(\sqrt{\sqrt[3]{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt[3]{re \cdot re + im \cdot im}}\right) \cdot \left(\sqrt[3]{re \cdot re + im \cdot im} \cdot \left(\sqrt[3]{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right)\right)}\right)}\\
\mathbf{elif}\;im \le 3.4260603049138435 \cdot 10^{-204}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + im\right)}\\
\end{array}double f(double re, double im) {
double r9498038 = 0.5;
double r9498039 = 2.0;
double r9498040 = re;
double r9498041 = r9498040 * r9498040;
double r9498042 = im;
double r9498043 = r9498042 * r9498042;
double r9498044 = r9498041 + r9498043;
double r9498045 = sqrt(r9498044);
double r9498046 = r9498045 + r9498040;
double r9498047 = r9498039 * r9498046;
double r9498048 = sqrt(r9498047);
double r9498049 = r9498038 * r9498048;
return r9498049;
}
double f(double re, double im) {
double r9498050 = im;
double r9498051 = -2.400647882280174e+136;
bool r9498052 = r9498050 <= r9498051;
double r9498053 = re;
double r9498054 = r9498053 - r9498050;
double r9498055 = 2.0;
double r9498056 = r9498054 * r9498055;
double r9498057 = sqrt(r9498056);
double r9498058 = 0.5;
double r9498059 = r9498057 * r9498058;
double r9498060 = -6.74361552556549e-164;
bool r9498061 = r9498050 <= r9498060;
double r9498062 = r9498053 * r9498053;
double r9498063 = r9498050 * r9498050;
double r9498064 = r9498062 + r9498063;
double r9498065 = cbrt(r9498064);
double r9498066 = sqrt(r9498065);
double r9498067 = r9498066 * r9498066;
double r9498068 = sqrt(r9498064);
double r9498069 = cbrt(r9498068);
double r9498070 = r9498069 * r9498069;
double r9498071 = r9498065 * r9498070;
double r9498072 = r9498067 * r9498071;
double r9498073 = sqrt(r9498072);
double r9498074 = r9498053 + r9498073;
double r9498075 = r9498055 * r9498074;
double r9498076 = sqrt(r9498075);
double r9498077 = r9498058 * r9498076;
double r9498078 = 3.4260603049138435e-204;
bool r9498079 = r9498050 <= r9498078;
double r9498080 = r9498053 + r9498053;
double r9498081 = r9498080 * r9498055;
double r9498082 = sqrt(r9498081);
double r9498083 = r9498058 * r9498082;
double r9498084 = r9498053 + r9498050;
double r9498085 = r9498055 * r9498084;
double r9498086 = sqrt(r9498085);
double r9498087 = r9498058 * r9498086;
double r9498088 = r9498079 ? r9498083 : r9498087;
double r9498089 = r9498061 ? r9498077 : r9498088;
double r9498090 = r9498052 ? r9498059 : r9498089;
return r9498090;
}




Bits error versus re




Bits error versus im
Results
| Original | 37.7 |
|---|---|
| Target | 32.8 |
| Herbie | 24.1 |
if im < -2.400647882280174e+136Initial program 56.3
rmApplied +-commutative56.3
Taylor expanded around -inf 8.5
if -2.400647882280174e+136 < im < -6.74361552556549e-164Initial program 24.2
rmApplied add-cube-cbrt24.5
rmApplied add-sqr-sqrt24.5
rmApplied add-sqr-sqrt24.5
Applied cbrt-prod24.5
if -6.74361552556549e-164 < im < 3.4260603049138435e-204Initial program 43.9
Taylor expanded around inf 35.4
if 3.4260603049138435e-204 < im Initial program 36.7
rmApplied add-cube-cbrt36.9
Taylor expanded around 0 23.5
Final simplification24.1
herbie shell --seed 2019135
(FPCore (re im)
:name "math.sqrt on complex, real part"
:herbie-target
(if (< re 0) (* 0.5 (* (sqrt 2) (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)))))