0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -7.240673218843522327919250789136495189333 \cdot 10^{150}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{-2 \cdot re}\right)}\\
\mathbf{elif}\;re \le 3.787000431377413829039638453986283883044 \cdot 10^{-283}:\\
\;\;\;\;0.5 \cdot \frac{\sqrt{2 \cdot {\left(\left|im\right|\right)}^{2}}}{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}\\
\mathbf{elif}\;re \le 8.736784500225597746587986871686332519603 \cdot 10^{-188}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{im - re}\right)}\\
\mathbf{elif}\;re \le 1.153451770878403765578063868666891624253 \cdot 10^{-53}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re} \cdot \left|im\right|\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(2 \cdot re\right)}\\
\end{array}double f(double re, double im) {
double r131519 = 0.5;
double r131520 = 2.0;
double r131521 = re;
double r131522 = r131521 * r131521;
double r131523 = im;
double r131524 = r131523 * r131523;
double r131525 = r131522 + r131524;
double r131526 = sqrt(r131525);
double r131527 = r131526 + r131521;
double r131528 = r131520 * r131527;
double r131529 = sqrt(r131528);
double r131530 = r131519 * r131529;
return r131530;
}
double f(double re, double im) {
double r131531 = re;
double r131532 = -7.240673218843522e+150;
bool r131533 = r131531 <= r131532;
double r131534 = 0.5;
double r131535 = 2.0;
double r131536 = im;
double r131537 = fabs(r131536);
double r131538 = -2.0;
double r131539 = r131538 * r131531;
double r131540 = r131537 / r131539;
double r131541 = r131537 * r131540;
double r131542 = r131535 * r131541;
double r131543 = sqrt(r131542);
double r131544 = r131534 * r131543;
double r131545 = 3.787000431377414e-283;
bool r131546 = r131531 <= r131545;
double r131547 = 2.0;
double r131548 = pow(r131537, r131547);
double r131549 = r131535 * r131548;
double r131550 = sqrt(r131549);
double r131551 = r131531 * r131531;
double r131552 = r131536 * r131536;
double r131553 = r131551 + r131552;
double r131554 = sqrt(r131553);
double r131555 = r131554 - r131531;
double r131556 = sqrt(r131555);
double r131557 = r131550 / r131556;
double r131558 = r131534 * r131557;
double r131559 = 8.736784500225598e-188;
bool r131560 = r131531 <= r131559;
double r131561 = r131536 - r131531;
double r131562 = r131537 / r131561;
double r131563 = r131537 * r131562;
double r131564 = r131535 * r131563;
double r131565 = sqrt(r131564);
double r131566 = r131534 * r131565;
double r131567 = 1.1534517708784038e-53;
bool r131568 = r131531 <= r131567;
double r131569 = r131537 / r131555;
double r131570 = r131569 * r131537;
double r131571 = r131535 * r131570;
double r131572 = sqrt(r131571);
double r131573 = r131534 * r131572;
double r131574 = r131547 * r131531;
double r131575 = r131535 * r131574;
double r131576 = sqrt(r131575);
double r131577 = r131534 * r131576;
double r131578 = r131568 ? r131573 : r131577;
double r131579 = r131560 ? r131566 : r131578;
double r131580 = r131546 ? r131558 : r131579;
double r131581 = r131533 ? r131544 : r131580;
return r131581;
}




Bits error versus re




Bits error versus im
Results
| Original | 39.0 |
|---|---|
| Target | 33.9 |
| Herbie | 26.3 |
if re < -7.240673218843522e+150Initial program 63.9
rmApplied flip-+63.9
Simplified50.5
rmApplied *-un-lft-identity50.5
Applied add-sqr-sqrt50.5
Applied times-frac50.5
Simplified50.5
Simplified50.1
Taylor expanded around -inf 24.7
if -7.240673218843522e+150 < re < 3.787000431377414e-283Initial program 39.7
rmApplied flip-+39.6
Simplified30.9
rmApplied *-un-lft-identity30.9
Applied add-sqr-sqrt30.9
Applied times-frac30.9
Simplified30.8
Simplified28.8
rmApplied associate-*r/30.9
Applied associate-*r/30.9
Applied sqrt-div29.9
Simplified29.9
if 3.787000431377414e-283 < re < 8.736784500225598e-188Initial program 29.5
rmApplied flip-+31.1
Simplified31.1
rmApplied *-un-lft-identity31.1
Applied add-sqr-sqrt31.1
Applied times-frac31.1
Simplified31.0
Simplified31.2
Taylor expanded around 0 35.6
if 8.736784500225598e-188 < re < 1.1534517708784038e-53Initial program 18.4
rmApplied flip-+34.6
Simplified34.6
rmApplied *-un-lft-identity34.6
Applied add-sqr-sqrt34.6
Applied times-frac34.6
Simplified34.5
Simplified34.3
rmApplied *-commutative34.3
if 1.1534517708784038e-53 < re Initial program 37.2
Taylor expanded around inf 17.1
Final simplification26.3
herbie shell --seed 2019212
(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)))))