0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -1.3657760091869803 \cdot 10^{154}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{-2 \cdot re}\right)}\\
\mathbf{elif}\;re \le -4.5405452937718227 \cdot 10^{-275}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{{im}^{2} \cdot 2}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\
\mathbf{elif}\;re \le 1.27662858127337166 \cdot 10^{-281}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{im - re}\right)}\\
\mathbf{elif}\;re \le 1.5366724406791122 \cdot 10^{106}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\sqrt{\sqrt{re \cdot re + im \cdot im}} \cdot \sqrt{\sqrt{re \cdot re + im \cdot im}} + re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\
\end{array}double f(double re, double im) {
double r181468 = 0.5;
double r181469 = 2.0;
double r181470 = re;
double r181471 = r181470 * r181470;
double r181472 = im;
double r181473 = r181472 * r181472;
double r181474 = r181471 + r181473;
double r181475 = sqrt(r181474);
double r181476 = r181475 + r181470;
double r181477 = r181469 * r181476;
double r181478 = sqrt(r181477);
double r181479 = r181468 * r181478;
return r181479;
}
double f(double re, double im) {
double r181480 = re;
double r181481 = -1.3657760091869803e+154;
bool r181482 = r181480 <= r181481;
double r181483 = 0.5;
double r181484 = 2.0;
double r181485 = im;
double r181486 = fabs(r181485);
double r181487 = -2.0;
double r181488 = r181487 * r181480;
double r181489 = r181486 / r181488;
double r181490 = r181486 * r181489;
double r181491 = r181484 * r181490;
double r181492 = sqrt(r181491);
double r181493 = r181483 * r181492;
double r181494 = -4.540545293771823e-275;
bool r181495 = r181480 <= r181494;
double r181496 = 2.0;
double r181497 = pow(r181485, r181496);
double r181498 = r181497 * r181484;
double r181499 = sqrt(r181498);
double r181500 = r181480 * r181480;
double r181501 = r181485 * r181485;
double r181502 = r181500 + r181501;
double r181503 = sqrt(r181502);
double r181504 = r181503 - r181480;
double r181505 = sqrt(r181504);
double r181506 = r181499 / r181505;
double r181507 = r181483 * r181506;
double r181508 = 1.2766285812733717e-281;
bool r181509 = r181480 <= r181508;
double r181510 = r181485 - r181480;
double r181511 = r181486 / r181510;
double r181512 = r181486 * r181511;
double r181513 = r181484 * r181512;
double r181514 = sqrt(r181513);
double r181515 = r181483 * r181514;
double r181516 = 1.5366724406791122e+106;
bool r181517 = r181480 <= r181516;
double r181518 = sqrt(r181503);
double r181519 = r181518 * r181518;
double r181520 = r181519 + r181480;
double r181521 = r181484 * r181520;
double r181522 = sqrt(r181521);
double r181523 = r181483 * r181522;
double r181524 = r181496 * r181480;
double r181525 = r181484 * r181524;
double r181526 = sqrt(r181525);
double r181527 = r181483 * r181526;
double r181528 = r181517 ? r181523 : r181527;
double r181529 = r181509 ? r181515 : r181528;
double r181530 = r181495 ? r181507 : r181529;
double r181531 = r181482 ? r181493 : r181530;
return r181531;
}




Bits error versus re




Bits error versus im
Results
| Original | 39.1 |
|---|---|
| Target | 34.1 |
| Herbie | 22.9 |
if re < -1.3657760091869803e+154Initial program 64.0
rmApplied add-sqr-sqrt64.0
Applied sqrt-prod64.0
rmApplied flip-+64.0
Simplified50.6
Simplified50.6
rmApplied *-un-lft-identity50.6
Applied add-sqr-sqrt50.6
Applied times-frac50.6
Simplified50.6
Simplified50.2
Taylor expanded around -inf 22.8
if -1.3657760091869803e+154 < re < -4.540545293771823e-275Initial program 41.2
rmApplied add-sqr-sqrt41.2
Applied sqrt-prod42.1
rmApplied flip-+41.9
Simplified31.4
Simplified31.4
rmApplied associate-*r/31.4
Applied sqrt-div30.0
Simplified30.0
if -4.540545293771823e-275 < re < 1.2766285812733717e-281Initial program 32.3
rmApplied add-sqr-sqrt32.3
Applied sqrt-prod32.4
rmApplied flip-+32.5
Simplified32.5
Simplified32.4
rmApplied *-un-lft-identity32.4
Applied add-sqr-sqrt32.4
Applied times-frac32.4
Simplified32.0
Simplified31.8
Taylor expanded around 0 33.4
if 1.2766285812733717e-281 < re < 1.5366724406791122e+106Initial program 20.7
rmApplied add-sqr-sqrt20.7
Applied sqrt-prod20.8
if 1.5366724406791122e+106 < re Initial program 52.7
rmApplied add-sqr-sqrt52.7
Applied sqrt-prod52.7
Taylor expanded around inf 8.9
Final simplification22.9
herbie shell --seed 2020046
(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)))))