0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;im \le -3.427084990917964108413212422566201425884 \cdot 10^{78}:\\
\;\;\;\;\sqrt{\left(re - im\right) \cdot 2} \cdot 0.5\\
\mathbf{elif}\;im \le -6.880635684369791890266505163497341664663 \cdot 10^{-159}:\\
\;\;\;\;\sqrt{2 \cdot \left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \left(\sqrt[3]{\sqrt{im \cdot im + re \cdot re}} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}\right) + re\right)} \cdot 0.5\\
\mathbf{elif}\;im \le 9.707826590282529498928144182059884326441 \cdot 10^{-159}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\
\mathbf{elif}\;im \le 1.186844868934467533231645340789520602325 \cdot 10^{-110}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{\left(im \cdot im\right) \cdot 2}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\\
\mathbf{elif}\;im \le 8.35344993113947417274173199718646800664 \cdot 10^{-93}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\
\mathbf{elif}\;im \le 9.216308869239449327917900245724612540155 \cdot 10^{-10}:\\
\;\;\;\;\sqrt{2 \cdot \frac{im \cdot im}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\sqrt{2 \cdot \left(re + im\right)} \cdot 0.5\\
\end{array}double f(double re, double im) {
double r98173 = 0.5;
double r98174 = 2.0;
double r98175 = re;
double r98176 = r98175 * r98175;
double r98177 = im;
double r98178 = r98177 * r98177;
double r98179 = r98176 + r98178;
double r98180 = sqrt(r98179);
double r98181 = r98180 + r98175;
double r98182 = r98174 * r98181;
double r98183 = sqrt(r98182);
double r98184 = r98173 * r98183;
return r98184;
}
double f(double re, double im) {
double r98185 = im;
double r98186 = -3.427084990917964e+78;
bool r98187 = r98185 <= r98186;
double r98188 = re;
double r98189 = r98188 - r98185;
double r98190 = 2.0;
double r98191 = r98189 * r98190;
double r98192 = sqrt(r98191);
double r98193 = 0.5;
double r98194 = r98192 * r98193;
double r98195 = -6.880635684369792e-159;
bool r98196 = r98185 <= r98195;
double r98197 = r98185 * r98185;
double r98198 = r98188 * r98188;
double r98199 = r98197 + r98198;
double r98200 = sqrt(r98199);
double r98201 = cbrt(r98200);
double r98202 = r98201 * r98201;
double r98203 = r98201 * r98202;
double r98204 = r98203 + r98188;
double r98205 = r98190 * r98204;
double r98206 = sqrt(r98205);
double r98207 = r98206 * r98193;
double r98208 = 9.70782659028253e-159;
bool r98209 = r98185 <= r98208;
double r98210 = r98188 + r98188;
double r98211 = r98190 * r98210;
double r98212 = sqrt(r98211);
double r98213 = r98193 * r98212;
double r98214 = 1.1868448689344675e-110;
bool r98215 = r98185 <= r98214;
double r98216 = r98197 * r98190;
double r98217 = sqrt(r98216);
double r98218 = r98200 - r98188;
double r98219 = sqrt(r98218);
double r98220 = r98217 / r98219;
double r98221 = r98193 * r98220;
double r98222 = 8.353449931139474e-93;
bool r98223 = r98185 <= r98222;
double r98224 = 9.216308869239449e-10;
bool r98225 = r98185 <= r98224;
double r98226 = r98197 / r98218;
double r98227 = r98190 * r98226;
double r98228 = sqrt(r98227);
double r98229 = r98228 * r98193;
double r98230 = r98188 + r98185;
double r98231 = r98190 * r98230;
double r98232 = sqrt(r98231);
double r98233 = r98232 * r98193;
double r98234 = r98225 ? r98229 : r98233;
double r98235 = r98223 ? r98213 : r98234;
double r98236 = r98215 ? r98221 : r98235;
double r98237 = r98209 ? r98213 : r98236;
double r98238 = r98196 ? r98207 : r98237;
double r98239 = r98187 ? r98194 : r98238;
return r98239;
}




Bits error versus re




Bits error versus im
Results
| Original | 37.6 |
|---|---|
| Target | 32.7 |
| Herbie | 22.6 |
if im < -3.427084990917964e+78Initial program 47.4
rmApplied add-cube-cbrt47.6
Simplified47.6
Simplified47.6
Taylor expanded around -inf 11.2
if -3.427084990917964e+78 < im < -6.880635684369792e-159Initial program 25.2
rmApplied add-cube-cbrt25.7
Simplified25.7
Simplified25.7
if -6.880635684369792e-159 < im < 9.70782659028253e-159 or 1.1868448689344675e-110 < im < 8.353449931139474e-93Initial program 42.3
Taylor expanded around inf 34.8
if 9.70782659028253e-159 < im < 1.1868448689344675e-110Initial program 29.1
rmApplied flip-+43.5
Applied associate-*r/43.5
Applied sqrt-div43.6
Simplified29.6
Simplified29.6
if 8.353449931139474e-93 < im < 9.216308869239449e-10Initial program 24.0
rmApplied flip-+35.4
Simplified25.1
Simplified25.1
if 9.216308869239449e-10 < im Initial program 39.8
Taylor expanded around 0 15.0
Final simplification22.6
herbie shell --seed 2019194
(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)))))