0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.347179798748403963307828143348853532465 \cdot 10^{154}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im}{-2 \cdot re}}\\
\mathbf{elif}\;re \le 2.697027979067210685579027899322932915421 \cdot 10^{-241}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\frac{im}{\sqrt{\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}} \cdot \frac{im}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}}\right) \cdot 2}\\
\mathbf{elif}\;re \le 1.472855835931036976191508699782905431485 \cdot 10^{93}:\\
\;\;\;\;\sqrt{2 \cdot \left(re + \sqrt{e^{\log \left(im \cdot im + re \cdot re\right)}}\right)} \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\
\end{array}double f(double re, double im) {
double r6821309 = 0.5;
double r6821310 = 2.0;
double r6821311 = re;
double r6821312 = r6821311 * r6821311;
double r6821313 = im;
double r6821314 = r6821313 * r6821313;
double r6821315 = r6821312 + r6821314;
double r6821316 = sqrt(r6821315);
double r6821317 = r6821316 + r6821311;
double r6821318 = r6821310 * r6821317;
double r6821319 = sqrt(r6821318);
double r6821320 = r6821309 * r6821319;
return r6821320;
}
double f(double re, double im) {
double r6821321 = re;
double r6821322 = -1.347179798748404e+154;
bool r6821323 = r6821321 <= r6821322;
double r6821324 = 0.5;
double r6821325 = 2.0;
double r6821326 = im;
double r6821327 = r6821326 * r6821326;
double r6821328 = -2.0;
double r6821329 = r6821328 * r6821321;
double r6821330 = r6821327 / r6821329;
double r6821331 = r6821325 * r6821330;
double r6821332 = sqrt(r6821331);
double r6821333 = r6821324 * r6821332;
double r6821334 = 2.6970279790672107e-241;
bool r6821335 = r6821321 <= r6821334;
double r6821336 = r6821321 * r6821321;
double r6821337 = r6821327 + r6821336;
double r6821338 = sqrt(r6821337);
double r6821339 = cbrt(r6821338);
double r6821340 = r6821339 * r6821339;
double r6821341 = r6821339 * r6821340;
double r6821342 = r6821341 - r6821321;
double r6821343 = sqrt(r6821342);
double r6821344 = r6821326 / r6821343;
double r6821345 = r6821338 - r6821321;
double r6821346 = sqrt(r6821345);
double r6821347 = r6821326 / r6821346;
double r6821348 = r6821344 * r6821347;
double r6821349 = r6821348 * r6821325;
double r6821350 = sqrt(r6821349);
double r6821351 = r6821324 * r6821350;
double r6821352 = 1.472855835931037e+93;
bool r6821353 = r6821321 <= r6821352;
double r6821354 = log(r6821337);
double r6821355 = exp(r6821354);
double r6821356 = sqrt(r6821355);
double r6821357 = r6821321 + r6821356;
double r6821358 = r6821325 * r6821357;
double r6821359 = sqrt(r6821358);
double r6821360 = r6821359 * r6821324;
double r6821361 = r6821321 + r6821321;
double r6821362 = r6821325 * r6821361;
double r6821363 = sqrt(r6821362);
double r6821364 = r6821324 * r6821363;
double r6821365 = r6821353 ? r6821360 : r6821364;
double r6821366 = r6821335 ? r6821351 : r6821365;
double r6821367 = r6821323 ? r6821333 : r6821366;
return r6821367;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.9 |
|---|---|
| Target | 33.7 |
| Herbie | 24.1 |
if re < -1.347179798748404e+154Initial program 64.0
rmApplied flip-+64.0
Simplified51.1
Taylor expanded around -inf 31.2
if -1.347179798748404e+154 < re < 2.6970279790672107e-241Initial program 38.8
rmApplied flip-+38.7
Simplified30.5
rmApplied add-sqr-sqrt30.7
Applied times-frac29.1
rmApplied add-cube-cbrt29.1
if 2.6970279790672107e-241 < re < 1.472855835931037e+93Initial program 19.5
rmApplied add-exp-log21.8
if 1.472855835931037e+93 < re Initial program 50.9
Taylor expanded around inf 10.2
Final simplification24.1
herbie shell --seed 2019170
(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)))))