0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -3.200905127333683 \cdot 10^{+79}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{-2 \cdot re}} \cdot 0.5\\
\mathbf{elif}\;re \le -5.524921853974811 \cdot 10^{-304}:\\
\;\;\;\;\sqrt{\frac{\left(im \cdot im\right) \cdot 2.0}{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\
\mathbf{elif}\;re \le 2.6316271211357036 \cdot 10^{+127}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + \left(\sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}} \cdot \left|\sqrt[3]{im \cdot im + re \cdot re}\right|\right) \cdot \sqrt{\sqrt{\sqrt[3]{im \cdot im + re \cdot re}}}\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(re + re\right) \cdot 2.0}\\
\end{array}double f(double re, double im) {
double r17761356 = 0.5;
double r17761357 = 2.0;
double r17761358 = re;
double r17761359 = r17761358 * r17761358;
double r17761360 = im;
double r17761361 = r17761360 * r17761360;
double r17761362 = r17761359 + r17761361;
double r17761363 = sqrt(r17761362);
double r17761364 = r17761363 + r17761358;
double r17761365 = r17761357 * r17761364;
double r17761366 = sqrt(r17761365);
double r17761367 = r17761356 * r17761366;
return r17761367;
}
double f(double re, double im) {
double r17761368 = re;
double r17761369 = -3.200905127333683e+79;
bool r17761370 = r17761368 <= r17761369;
double r17761371 = im;
double r17761372 = r17761371 * r17761371;
double r17761373 = 2.0;
double r17761374 = r17761372 * r17761373;
double r17761375 = sqrt(r17761374);
double r17761376 = -2.0;
double r17761377 = r17761376 * r17761368;
double r17761378 = sqrt(r17761377);
double r17761379 = r17761375 / r17761378;
double r17761380 = 0.5;
double r17761381 = r17761379 * r17761380;
double r17761382 = -5.524921853974811e-304;
bool r17761383 = r17761368 <= r17761382;
double r17761384 = r17761368 * r17761368;
double r17761385 = r17761372 + r17761384;
double r17761386 = sqrt(r17761385);
double r17761387 = r17761386 - r17761368;
double r17761388 = r17761374 / r17761387;
double r17761389 = sqrt(r17761388);
double r17761390 = r17761389 * r17761380;
double r17761391 = 2.6316271211357036e+127;
bool r17761392 = r17761368 <= r17761391;
double r17761393 = cbrt(r17761385);
double r17761394 = sqrt(r17761393);
double r17761395 = sqrt(r17761394);
double r17761396 = fabs(r17761393);
double r17761397 = r17761395 * r17761396;
double r17761398 = r17761397 * r17761395;
double r17761399 = r17761368 + r17761398;
double r17761400 = r17761373 * r17761399;
double r17761401 = sqrt(r17761400);
double r17761402 = r17761380 * r17761401;
double r17761403 = r17761368 + r17761368;
double r17761404 = r17761403 * r17761373;
double r17761405 = sqrt(r17761404);
double r17761406 = r17761380 * r17761405;
double r17761407 = r17761392 ? r17761402 : r17761406;
double r17761408 = r17761383 ? r17761390 : r17761407;
double r17761409 = r17761370 ? r17761381 : r17761408;
return r17761409;
}




Bits error versus re




Bits error versus im
Results
| Original | 37.7 |
|---|---|
| Target | 32.8 |
| Herbie | 22.7 |
if re < -3.200905127333683e+79Initial program 58.4
rmApplied flip-+58.4
Applied associate-*r/58.4
Applied sqrt-div58.4
Simplified41.8
Taylor expanded around -inf 22.8
if -3.200905127333683e+79 < re < -5.524921853974811e-304Initial program 37.2
rmApplied flip-+37.1
Applied associate-*r/37.1
Applied sqrt-div37.2
Simplified30.3
rmApplied sqrt-undiv30.4
if -5.524921853974811e-304 < re < 2.6316271211357036e+127Initial program 20.5
rmApplied add-cube-cbrt20.7
Applied sqrt-prod20.7
Simplified20.7
rmApplied add-sqr-sqrt20.7
Applied sqrt-prod20.8
Applied associate-*r*20.8
if 2.6316271211357036e+127 < re Initial program 53.5
Taylor expanded around inf 10.1
Final simplification22.7
herbie shell --seed 2019124
(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)))))