0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -5.330091552844717472226479932066920744645 \cdot 10^{114}:\\
\;\;\;\;0.5 \cdot \frac{\left|im\right| \cdot \sqrt{2}}{\sqrt{\left(-re\right) - re}}\\
\mathbf{elif}\;re \le -4.215661627499373563855656419004671791113 \cdot 10^{-144}:\\
\;\;\;\;0.5 \cdot \frac{\frac{\left|im\right| \cdot \sqrt{2}}{\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}}{\sqrt{\sqrt{\sqrt{re \cdot re + im \cdot im} - re}}}\\
\mathbf{elif}\;re \le 5.124751274050741168628571362640123162884 \cdot 10^{-246}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im + re\right)}\\
\mathbf{elif}\;re \le 1.280297657817536289043603160829670533045 \cdot 10^{-204} \lor \neg \left(re \le 9.727118253535961652403013059453411638468 \cdot 10^{-160}\right) \land re \le 4.202834506095946744840619038062984088453 \cdot 10^{-94}:\\
\;\;\;\;0.5 \cdot \sqrt{\frac{im}{\frac{\sqrt{re \cdot re + im \cdot im} - re}{2}} \cdot im}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + re\right)}\\
\end{array}double f(double re, double im) {
double r109586 = 0.5;
double r109587 = 2.0;
double r109588 = re;
double r109589 = r109588 * r109588;
double r109590 = im;
double r109591 = r109590 * r109590;
double r109592 = r109589 + r109591;
double r109593 = sqrt(r109592);
double r109594 = r109593 + r109588;
double r109595 = r109587 * r109594;
double r109596 = sqrt(r109595);
double r109597 = r109586 * r109596;
return r109597;
}
double f(double re, double im) {
double r109598 = re;
double r109599 = -5.330091552844717e+114;
bool r109600 = r109598 <= r109599;
double r109601 = 0.5;
double r109602 = im;
double r109603 = fabs(r109602);
double r109604 = 2.0;
double r109605 = sqrt(r109604);
double r109606 = r109603 * r109605;
double r109607 = -r109598;
double r109608 = r109607 - r109598;
double r109609 = sqrt(r109608);
double r109610 = r109606 / r109609;
double r109611 = r109601 * r109610;
double r109612 = -4.2156616274993736e-144;
bool r109613 = r109598 <= r109612;
double r109614 = r109598 * r109598;
double r109615 = r109602 * r109602;
double r109616 = r109614 + r109615;
double r109617 = sqrt(r109616);
double r109618 = r109617 - r109598;
double r109619 = sqrt(r109618);
double r109620 = sqrt(r109619);
double r109621 = r109606 / r109620;
double r109622 = r109621 / r109620;
double r109623 = r109601 * r109622;
double r109624 = 5.124751274050741e-246;
bool r109625 = r109598 <= r109624;
double r109626 = r109602 + r109598;
double r109627 = r109604 * r109626;
double r109628 = sqrt(r109627);
double r109629 = r109601 * r109628;
double r109630 = 1.2802976578175363e-204;
bool r109631 = r109598 <= r109630;
double r109632 = 9.727118253535962e-160;
bool r109633 = r109598 <= r109632;
double r109634 = !r109633;
double r109635 = 4.202834506095947e-94;
bool r109636 = r109598 <= r109635;
bool r109637 = r109634 && r109636;
bool r109638 = r109631 || r109637;
double r109639 = r109618 / r109604;
double r109640 = r109602 / r109639;
double r109641 = r109640 * r109602;
double r109642 = sqrt(r109641);
double r109643 = r109601 * r109642;
double r109644 = r109598 + r109598;
double r109645 = r109604 * r109644;
double r109646 = sqrt(r109645);
double r109647 = r109601 * r109646;
double r109648 = r109638 ? r109643 : r109647;
double r109649 = r109625 ? r109629 : r109648;
double r109650 = r109613 ? r109623 : r109649;
double r109651 = r109600 ? r109611 : r109650;
return r109651;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.5 |
|---|---|
| Target | 33.3 |
| Herbie | 22.6 |
if re < -5.330091552844717e+114Initial program 61.8
rmApplied flip-+61.8
Applied associate-*r/61.9
Applied sqrt-div61.9
Simplified45.4
rmApplied sqrt-prod45.3
Simplified43.1
Taylor expanded around -inf 8.9
Simplified8.9
if -5.330091552844717e+114 < re < -4.2156616274993736e-144Initial program 43.2
rmApplied flip-+43.2
Applied associate-*r/43.4
Applied sqrt-div43.5
Simplified28.4
rmApplied sqrt-prod28.3
Simplified15.5
rmApplied add-sqr-sqrt15.5
Applied sqrt-prod15.7
Applied associate-/r*15.7
if -4.2156616274993736e-144 < re < 5.124751274050741e-246Initial program 31.6
Taylor expanded around 0 36.2
if 5.124751274050741e-246 < re < 1.2802976578175363e-204 or 9.727118253535962e-160 < re < 4.202834506095947e-94Initial program 20.9
rmApplied flip-+33.1
Applied associate-*r/33.2
Applied sqrt-div33.6
Simplified33.6
rmApplied sqrt-undiv33.2
Simplified32.8
if 1.2802976578175363e-204 < re < 9.727118253535962e-160 or 4.202834506095947e-94 < re Initial program 33.3
Taylor expanded around inf 23.5
Final simplification22.6
herbie shell --seed 2019325
(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)))))