0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} + re\right)}\begin{array}{l}
\mathbf{if}\;re \le -6.884475381550604966591504035533371718295 \cdot 10^{182}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \frac{im \cdot im - 0}{-1 \cdot re + -1 \cdot re}}\\
\mathbf{elif}\;re \le -3.2990529075045902473348962112718304861 \cdot 10^{-203}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left|im\right| \cdot \frac{\left|im\right|}{\sqrt{re \cdot re + im \cdot im} - re}\right)}\\
\mathbf{elif}\;re \le -9.854979918925235333271025745486769435252 \cdot 10^{-302}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re + im\right)}\\
\mathbf{elif}\;re \le 9.050853877782241337883530415155068886463 \cdot 10^{72}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(\left(\sqrt[3]{\sqrt[3]{re \cdot re + im \cdot im} \cdot \sqrt[3]{\sqrt{im \cdot im + re \cdot re}}} \cdot \sqrt[3]{\sqrt{re \cdot re + im \cdot im}}\right) \cdot \sqrt[3]{\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 r123747 = 0.5;
double r123748 = 2.0;
double r123749 = re;
double r123750 = r123749 * r123749;
double r123751 = im;
double r123752 = r123751 * r123751;
double r123753 = r123750 + r123752;
double r123754 = sqrt(r123753);
double r123755 = r123754 + r123749;
double r123756 = r123748 * r123755;
double r123757 = sqrt(r123756);
double r123758 = r123747 * r123757;
return r123758;
}
double f(double re, double im) {
double r123759 = re;
double r123760 = -6.884475381550605e+182;
bool r123761 = r123759 <= r123760;
double r123762 = 0.5;
double r123763 = 2.0;
double r123764 = im;
double r123765 = r123764 * r123764;
double r123766 = 0.0;
double r123767 = r123765 - r123766;
double r123768 = -1.0;
double r123769 = r123768 * r123759;
double r123770 = r123769 + r123769;
double r123771 = r123767 / r123770;
double r123772 = r123763 * r123771;
double r123773 = sqrt(r123772);
double r123774 = r123762 * r123773;
double r123775 = -3.29905290750459e-203;
bool r123776 = r123759 <= r123775;
double r123777 = fabs(r123764);
double r123778 = r123759 * r123759;
double r123779 = r123778 + r123765;
double r123780 = sqrt(r123779);
double r123781 = r123780 - r123759;
double r123782 = r123777 / r123781;
double r123783 = r123777 * r123782;
double r123784 = r123763 * r123783;
double r123785 = sqrt(r123784);
double r123786 = r123762 * r123785;
double r123787 = -9.854979918925235e-302;
bool r123788 = r123759 <= r123787;
double r123789 = r123759 + r123764;
double r123790 = r123763 * r123789;
double r123791 = sqrt(r123790);
double r123792 = r123762 * r123791;
double r123793 = 9.050853877782241e+72;
bool r123794 = r123759 <= r123793;
double r123795 = cbrt(r123779);
double r123796 = r123765 + r123778;
double r123797 = sqrt(r123796);
double r123798 = cbrt(r123797);
double r123799 = r123795 * r123798;
double r123800 = cbrt(r123799);
double r123801 = cbrt(r123780);
double r123802 = r123800 * r123801;
double r123803 = r123802 * r123801;
double r123804 = r123803 + r123759;
double r123805 = r123763 * r123804;
double r123806 = sqrt(r123805);
double r123807 = r123762 * r123806;
double r123808 = 2.0;
double r123809 = r123808 * r123759;
double r123810 = r123763 * r123809;
double r123811 = sqrt(r123810);
double r123812 = r123762 * r123811;
double r123813 = r123794 ? r123807 : r123812;
double r123814 = r123788 ? r123792 : r123813;
double r123815 = r123776 ? r123786 : r123814;
double r123816 = r123761 ? r123774 : r123815;
return r123816;
}




Bits error versus re




Bits error versus im
Results
| Original | 38.6 |
|---|---|
| Target | 33.5 |
| Herbie | 24.2 |
if re < -6.884475381550605e+182Initial program 64.0
rmApplied add-cube-cbrt64.0
rmApplied flip-+64.0
Simplified48.9
Simplified48.9
Taylor expanded around -inf 31.4
if -6.884475381550605e+182 < re < -3.29905290750459e-203Initial program 44.2
rmApplied add-cube-cbrt46.0
rmApplied flip-+45.9
Simplified32.8
Simplified32.6
rmApplied *-un-lft-identity32.6
Applied add-sqr-sqrt32.6
Applied times-frac32.6
Simplified32.5
Simplified30.2
if -3.29905290750459e-203 < re < -9.854979918925235e-302Initial program 31.3
rmApplied add-cube-cbrt31.7
rmApplied flip-+31.0
Simplified31.0
Simplified30.6
Taylor expanded around inf 35.3
if -9.854979918925235e-302 < re < 9.050853877782241e+72Initial program 21.3
rmApplied add-cube-cbrt21.8
rmApplied add-cube-cbrt21.8
Simplified21.8
Simplified21.8
if 9.050853877782241e+72 < re Initial program 46.8
rmApplied add-cube-cbrt46.9
rmApplied flip-+58.9
Simplified60.9
Simplified61.3
Taylor expanded around 0 10.8
Final simplification24.2
herbie shell --seed 2019291
(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)))))