0.5 \cdot \sqrt{2.0 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le 2.2294847734776152 \cdot 10^{-278}:\\
\;\;\;\;\frac{\sqrt{\left(im \cdot im\right) \cdot 2.0}}{\sqrt{\sqrt{im \cdot im + re \cdot re} - re}} \cdot 0.5\\
\mathbf{elif}\;re \le 9.399354552169095 \cdot 10^{-159}:\\
\;\;\;\;\sqrt{2.0 \cdot \left(im + re\right)} \cdot 0.5\\
\mathbf{elif}\;re \le 2.076516789293858 \cdot 10^{+101}:\\
\;\;\;\;0.5 \cdot \sqrt{\left(\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)} \cdot \sqrt{\sqrt{im \cdot im + re \cdot re}} + re\right) \cdot 2.0}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2.0 \cdot \left(re + re\right)}\\
\end{array}double f(double re, double im) {
double r34369616 = 0.5;
double r34369617 = 2.0;
double r34369618 = re;
double r34369619 = r34369618 * r34369618;
double r34369620 = im;
double r34369621 = r34369620 * r34369620;
double r34369622 = r34369619 + r34369621;
double r34369623 = sqrt(r34369622);
double r34369624 = r34369623 + r34369618;
double r34369625 = r34369617 * r34369624;
double r34369626 = sqrt(r34369625);
double r34369627 = r34369616 * r34369626;
return r34369627;
}
double f(double re, double im) {
double r34369628 = re;
double r34369629 = 2.2294847734776152e-278;
bool r34369630 = r34369628 <= r34369629;
double r34369631 = im;
double r34369632 = r34369631 * r34369631;
double r34369633 = 2.0;
double r34369634 = r34369632 * r34369633;
double r34369635 = sqrt(r34369634);
double r34369636 = r34369628 * r34369628;
double r34369637 = r34369632 + r34369636;
double r34369638 = sqrt(r34369637);
double r34369639 = r34369638 - r34369628;
double r34369640 = sqrt(r34369639);
double r34369641 = r34369635 / r34369640;
double r34369642 = 0.5;
double r34369643 = r34369641 * r34369642;
double r34369644 = 9.399354552169095e-159;
bool r34369645 = r34369628 <= r34369644;
double r34369646 = r34369631 + r34369628;
double r34369647 = r34369633 * r34369646;
double r34369648 = sqrt(r34369647);
double r34369649 = r34369648 * r34369642;
double r34369650 = 2.076516789293858e+101;
bool r34369651 = r34369628 <= r34369650;
double r34369652 = cbrt(r34369638);
double r34369653 = r34369652 * r34369652;
double r34369654 = r34369652 * r34369653;
double r34369655 = sqrt(r34369654);
double r34369656 = sqrt(r34369638);
double r34369657 = r34369655 * r34369656;
double r34369658 = r34369657 + r34369628;
double r34369659 = r34369658 * r34369633;
double r34369660 = sqrt(r34369659);
double r34369661 = r34369642 * r34369660;
double r34369662 = r34369628 + r34369628;
double r34369663 = r34369633 * r34369662;
double r34369664 = sqrt(r34369663);
double r34369665 = r34369642 * r34369664;
double r34369666 = r34369651 ? r34369661 : r34369665;
double r34369667 = r34369645 ? r34369649 : r34369666;
double r34369668 = r34369630 ? r34369643 : r34369667;
return r34369668;
}




Bits error versus re




Bits error versus im
Results
| Original | 37.4 |
|---|---|
| Target | 32.4 |
| Herbie | 26.1 |
if re < 2.2294847734776152e-278Initial program 44.5
rmApplied flip-+44.4
Applied associate-*r/44.5
Applied sqrt-div44.5
Simplified34.0
if 2.2294847734776152e-278 < re < 9.399354552169095e-159Initial program 27.2
rmApplied add-sqr-sqrt27.2
Applied sqrt-prod27.3
Taylor expanded around 0 33.4
if 9.399354552169095e-159 < re < 2.076516789293858e+101Initial program 14.9
rmApplied add-sqr-sqrt14.9
Applied sqrt-prod15.0
rmApplied add-cube-cbrt15.2
if 2.076516789293858e+101 < re Initial program 50.0
rmApplied add-sqr-sqrt50.0
Applied sqrt-prod50.0
Taylor expanded around inf 11.2
Final simplification26.1
herbie shell --seed 2019128
(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)))))