36 #ifndef _GLIBCXX_COMPLEX 
   37 #define _GLIBCXX_COMPLEX 1 
   39 #pragma GCC system_header 
   50 namespace std _GLIBCXX_VISIBILITY(default)
 
   52 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   64   template<> 
class complex<float>;
 
   65   template<> 
class complex<double>;
 
   66   template<> 
class complex<long double>;
 
  121   template<
typename _Tp>
 
  129       _GLIBCXX_CONSTEXPR 
complex(
const _Tp& __r = _Tp(), 
const _Tp& __i = _Tp())
 
  130       : _M_real(__r), _M_imag(__i) { }
 
  135       template<
typename _Up>
 
  137     : _M_real(__z.real()), _M_imag(__z.imag()) { }
 
  139 #if __cplusplus >= 201103L 
  142       _GLIBCXX_ABI_TAG_CXX11
 
  144       real() { 
return _M_real; }
 
  146       _GLIBCXX_ABI_TAG_CXX11
 
  148       imag() { 
return _M_imag; }
 
  152       real() { 
return _M_real; }
 
  156       real()
 const { 
return _M_real; }
 
  160       imag() { 
return _M_imag; }
 
  164       imag()
 const { 
return _M_imag; }
 
  170       real(_Tp __val) { _M_real = __val; }
 
  173       imag(_Tp __val) { _M_imag = __val; }
 
  205       template<
typename _Up>
 
  208       template<
typename _Up>
 
  211       template<
typename _Up>
 
  214       template<
typename _Up>
 
  217       template<
typename _Up>
 
  220       _GLIBCXX_USE_CONSTEXPR 
complex __rep()
 const 
  228   template<
typename _Tp>
 
  238   template<
typename _Tp>
 
  248   template<
typename _Tp>
 
  257   template<
typename _Tp>
 
  258     template<
typename _Up>
 
  262       _M_real = __z.real();
 
  263       _M_imag = __z.imag();
 
  268   template<
typename _Tp>
 
  269     template<
typename _Up>
 
  273       _M_real += __z.real();
 
  274       _M_imag += __z.imag();
 
  279   template<
typename _Tp>
 
  280     template<
typename _Up>
 
  284       _M_real -= __z.real();
 
  285       _M_imag -= __z.imag();
 
  291   template<
typename _Tp>
 
  292     template<
typename _Up>
 
  296       const _Tp __r = _M_real * __z.real() - _M_imag * __z.imag();
 
  297       _M_imag = _M_real * __z.imag() + _M_imag * __z.real();
 
  304   template<
typename _Tp>
 
  305     template<
typename _Up>
 
  309       const _Tp __r =  _M_real * __z.real() + _M_imag * __z.imag();
 
  311       _M_imag = (_M_imag * __z.real() - _M_real * __z.imag()) / __n;
 
  319   template<
typename _Tp>
 
  328   template<
typename _Tp>
 
  337   template<
typename _Tp>
 
  349   template<
typename _Tp>
 
  358   template<
typename _Tp>
 
  367   template<
typename _Tp>
 
  379   template<
typename _Tp>
 
  388   template<
typename _Tp>
 
  397   template<
typename _Tp>
 
  409   template<
typename _Tp>
 
  418   template<
typename _Tp>
 
  427   template<
typename _Tp>
 
  438   template<
typename _Tp>
 
  444   template<
typename _Tp>
 
  451   template<
typename _Tp>
 
  452     inline _GLIBCXX_CONSTEXPR 
bool 
  454     { 
return __x.real() == __y.real() && __x.imag() == __y.imag(); }
 
  456   template<
typename _Tp>
 
  457     inline _GLIBCXX_CONSTEXPR 
bool 
  459     { 
return __x.real() == __y && __x.imag() == _Tp(); }
 
  461   template<
typename _Tp>
 
  462     inline _GLIBCXX_CONSTEXPR 
bool 
  464     { 
return __x == __y.real() && _Tp() == __y.imag(); }
 
  469   template<
typename _Tp>
 
  470     inline _GLIBCXX_CONSTEXPR 
bool 
  472     { 
return __x.real() != __y.real() || __x.imag() != __y.imag(); }
 
  474   template<
typename _Tp>
 
  475     inline _GLIBCXX_CONSTEXPR 
bool 
  477     { 
return __x.real() != __y || __x.imag() != _Tp(); }
 
  479   template<
typename _Tp>
 
  480     inline _GLIBCXX_CONSTEXPR 
bool 
  482     { 
return __x != __y.real() || _Tp() != __y.imag(); }
 
  486   template<
typename _Tp, 
typename _CharT, 
class _Traits>
 
  487     basic_istream<_CharT, _Traits>&
 
  495       __is >> __re_x >> __ch;
 
  498           __is >> __im_x >> __ch;
 
  504       else if (__ch == 
')') 
 
  519   template<
typename _Tp, 
typename _CharT, 
class _Traits>
 
  520     basic_ostream<_CharT, _Traits>&
 
  521     operator<<(basic_ostream<_CharT, _Traits>& __os, 
const complex<_Tp>& __x)
 
  524       __s.
flags(__os.flags());
 
  525       __s.
imbue(__os.getloc());
 
  527       __s << 
'(' << __x.real() << 
',' << __x.imag() << 
')';
 
  528       return __os << __s.
str();
 
  532 #if __cplusplus >= 201103L 
  533   template<
typename _Tp>
 
  535     real(
const complex<_Tp>& __z)
 
  536     { 
return __z.real(); }
 
  538   template<
typename _Tp>
 
  540     imag(
const complex<_Tp>& __z)
 
  541     { 
return __z.imag(); }
 
  543   template<
typename _Tp>
 
  545     real(complex<_Tp>& __z)
 
  546     { 
return __z.real(); }
 
  548   template<
typename _Tp>
 
  550     real(
const complex<_Tp>& __z)
 
  551     { 
return __z.real(); }
 
  553   template<
typename _Tp>
 
  555     imag(complex<_Tp>& __z)
 
  556     { 
return __z.imag(); }
 
  558   template<
typename _Tp>
 
  560     imag(
const complex<_Tp>& __z)
 
  561     { 
return __z.imag(); }
 
  565   template<
typename _Tp>
 
  567     __complex_abs(
const complex<_Tp>& __z)
 
  569       _Tp __x = __z.real();
 
  570       _Tp __y = __z.imag();
 
  576       return __s * 
sqrt(__x * __x + __y * __y);
 
  579 #if _GLIBCXX_USE_C99_COMPLEX 
  581   __complex_abs(__complex__ 
float __z) { 
return __builtin_cabsf(__z); }
 
  584   __complex_abs(__complex__ 
double __z) { 
return __builtin_cabs(__z); }
 
  587   __complex_abs(
const __complex__ 
long double& __z)
 
  588   { 
return __builtin_cabsl(__z); }
 
  590   template<
typename _Tp>
 
  592     abs(
const complex<_Tp>& __z) { 
return __complex_abs(__z.__rep()); }
 
  594   template<
typename _Tp>
 
  601   template<
typename _Tp>
 
  603     __complex_arg(
const complex<_Tp>& __z)
 
  604     { 
return  atan2(__z.imag(), __z.real()); }
 
  606 #if _GLIBCXX_USE_C99_COMPLEX 
  608   __complex_arg(__complex__ 
float __z) { 
return __builtin_cargf(__z); }
 
  611   __complex_arg(__complex__ 
double __z) { 
return __builtin_carg(__z); }
 
  614   __complex_arg(
const __complex__ 
long double& __z)
 
  615   { 
return __builtin_cargl(__z); }
 
  617   template<
typename _Tp>
 
  619     arg(
const complex<_Tp>& __z) { 
return __complex_arg(__z.__rep()); }
 
  621   template<
typename _Tp>
 
  634       template<
typename _Tp>
 
  635         static inline _Tp _S_do_it(
const complex<_Tp>& __z)
 
  637           const _Tp __x = __z.real();
 
  638           const _Tp __y = __z.imag();
 
  639           return __x * __x + __y * __y;
 
  644     struct _Norm_helper<true>
 
  646       template<
typename _Tp>
 
  647         static inline _Tp _S_do_it(
const complex<_Tp>& __z)
 
  650           return __res * __res;
 
  654   template<
typename _Tp>
 
  658       return _Norm_helper<__is_floating<_Tp>::__value 
 
  659     && !_GLIBCXX_FAST_MATH>::_S_do_it(__z);
 
  662   template<
typename _Tp>
 
  664     polar(
const _Tp& __rho, 
const _Tp& __theta)
 
  667   template<
typename _Tp>
 
  675   template<
typename _Tp>
 
  677     __complex_cos(
const complex<_Tp>& __z)
 
  679       const _Tp __x = __z.real();
 
  680       const _Tp __y = __z.imag();
 
  684 #if _GLIBCXX_USE_C99_COMPLEX 
  685   inline __complex__ 
float 
  686   __complex_cos(__complex__ 
float __z) { 
return __builtin_ccosf(__z); }
 
  688   inline __complex__ 
double 
  689   __complex_cos(__complex__ 
double __z) { 
return __builtin_ccos(__z); }
 
  691   inline __complex__ 
long double 
  692   __complex_cos(
const __complex__ 
long double& __z)
 
  693   { 
return __builtin_ccosl(__z); }
 
  695   template<
typename _Tp>
 
  697     cos(
const complex<_Tp>& __z) { 
return __complex_cos(__z.__rep()); }
 
  699   template<
typename _Tp>
 
  705   template<
typename _Tp>
 
  707     __complex_cosh(
const complex<_Tp>& __z)
 
  709       const _Tp __x = __z.real();
 
  710       const _Tp __y = __z.imag();
 
  714 #if _GLIBCXX_USE_C99_COMPLEX 
  715   inline __complex__ 
float 
  716   __complex_cosh(__complex__ 
float __z) { 
return __builtin_ccoshf(__z); }
 
  718   inline __complex__ 
double 
  719   __complex_cosh(__complex__ 
double __z) { 
return __builtin_ccosh(__z); }
 
  721   inline __complex__ 
long double 
  722   __complex_cosh(
const __complex__ 
long double& __z)
 
  723   { 
return __builtin_ccoshl(__z); }
 
  725   template<
typename _Tp>
 
  727     cosh(
const complex<_Tp>& __z) { 
return __complex_cosh(__z.__rep()); }
 
  729   template<
typename _Tp>
 
  735   template<
typename _Tp>
 
  737     __complex_exp(
const complex<_Tp>& __z)
 
  740 #if _GLIBCXX_USE_C99_COMPLEX 
  741   inline __complex__ 
float 
  742   __complex_exp(__complex__ 
float __z) { 
return __builtin_cexpf(__z); }
 
  744   inline __complex__ 
double 
  745   __complex_exp(__complex__ 
double __z) { 
return __builtin_cexp(__z); }
 
  747   inline __complex__ 
long double 
  748   __complex_exp(
const __complex__ 
long double& __z)
 
  749   { 
return __builtin_cexpl(__z); }
 
  751   template<
typename _Tp>
 
  753     exp(
const complex<_Tp>& __z) { 
return __complex_exp(__z.__rep()); }
 
  755   template<
typename _Tp>
 
  762   template<
typename _Tp>
 
  764     __complex_log(
const complex<_Tp>& __z)
 
  767 #if _GLIBCXX_USE_C99_COMPLEX 
  768   inline __complex__ 
float 
  769   __complex_log(__complex__ 
float __z) { 
return __builtin_clogf(__z); }
 
  771   inline __complex__ 
double 
  772   __complex_log(__complex__ 
double __z) { 
return __builtin_clog(__z); }
 
  774   inline __complex__ 
long double 
  775   __complex_log(
const __complex__ 
long double& __z)
 
  776   { 
return __builtin_clogl(__z); }
 
  778   template<
typename _Tp>
 
  780     log(
const complex<_Tp>& __z) { 
return __complex_log(__z.__rep()); }
 
  782   template<
typename _Tp>
 
  787   template<
typename _Tp>
 
  793   template<
typename _Tp>
 
  795     __complex_sin(
const complex<_Tp>& __z)
 
  797       const _Tp __x = __z.real();
 
  798       const _Tp __y = __z.imag();
 
  802 #if _GLIBCXX_USE_C99_COMPLEX 
  803   inline __complex__ 
float 
  804   __complex_sin(__complex__ 
float __z) { 
return __builtin_csinf(__z); }
 
  806   inline __complex__ 
double 
  807   __complex_sin(__complex__ 
double __z) { 
return __builtin_csin(__z); }
 
  809   inline __complex__ 
long double 
  810   __complex_sin(
const __complex__ 
long double& __z)
 
  811   { 
return __builtin_csinl(__z); }
 
  813   template<
typename _Tp>
 
  815     sin(
const complex<_Tp>& __z) { 
return __complex_sin(__z.__rep()); }
 
  817   template<
typename _Tp>
 
  823   template<
typename _Tp>
 
  825     __complex_sinh(
const complex<_Tp>& __z)
 
  827       const _Tp __x = __z.real();
 
  828       const _Tp  __y = __z.imag();
 
  832 #if _GLIBCXX_USE_C99_COMPLEX 
  833   inline __complex__ 
float 
  834   __complex_sinh(__complex__ 
float __z) { 
return __builtin_csinhf(__z); }      
 
  836   inline __complex__ 
double 
  837   __complex_sinh(__complex__ 
double __z) { 
return __builtin_csinh(__z); }      
 
  839   inline __complex__ 
long double 
  840   __complex_sinh(
const __complex__ 
long double& __z)
 
  841   { 
return __builtin_csinhl(__z); }      
 
  843   template<
typename _Tp>
 
  845     sinh(
const complex<_Tp>& __z) { 
return __complex_sinh(__z.__rep()); }
 
  847   template<
typename _Tp>
 
  854   template<
typename _Tp>
 
  856     __complex_sqrt(
const complex<_Tp>& __z)
 
  858       _Tp __x = __z.real();
 
  859       _Tp __y = __z.imag();
 
  864           return complex<_Tp>(__t, __y < _Tp() ? -__t : __t);
 
  871             ? complex<_Tp>(__u, __y / __t)
 
  872             : complex<_Tp>(
abs(__y) / __t, __y < _Tp() ? -__u : __u);
 
  876 #if _GLIBCXX_USE_C99_COMPLEX 
  877   inline __complex__ 
float 
  878   __complex_sqrt(__complex__ 
float __z) { 
return __builtin_csqrtf(__z); }
 
  880   inline __complex__ 
double 
  881   __complex_sqrt(__complex__ 
double __z) { 
return __builtin_csqrt(__z); }
 
  883   inline __complex__ 
long double 
  884   __complex_sqrt(
const __complex__ 
long double& __z)
 
  885   { 
return __builtin_csqrtl(__z); }
 
  887   template<
typename _Tp>
 
  889     sqrt(
const complex<_Tp>& __z) { 
return __complex_sqrt(__z.__rep()); }
 
  891   template<
typename _Tp>
 
  898   template<
typename _Tp>
 
  900     __complex_tan(
const complex<_Tp>& __z)
 
  903 #if _GLIBCXX_USE_C99_COMPLEX 
  904   inline __complex__ 
float 
  905   __complex_tan(__complex__ 
float __z) { 
return __builtin_ctanf(__z); }
 
  907   inline __complex__ 
double 
  908   __complex_tan(__complex__ 
double __z) { 
return __builtin_ctan(__z); }
 
  910   inline __complex__ 
long double 
  911   __complex_tan(
const __complex__ 
long double& __z)
 
  912   { 
return __builtin_ctanl(__z); }
 
  914   template<
typename _Tp>
 
  916     tan(
const complex<_Tp>& __z) { 
return __complex_tan(__z.__rep()); }
 
  918   template<
typename _Tp>
 
  926   template<
typename _Tp>
 
  928     __complex_tanh(
const complex<_Tp>& __z)
 
  931 #if _GLIBCXX_USE_C99_COMPLEX 
  932   inline __complex__ 
float 
  933   __complex_tanh(__complex__ 
float __z) { 
return __builtin_ctanhf(__z); }
 
  935   inline __complex__ 
double 
  936   __complex_tanh(__complex__ 
double __z) { 
return __builtin_ctanh(__z); }
 
  938   inline __complex__ 
long double 
  939   __complex_tanh(
const __complex__ 
long double& __z)
 
  940   { 
return __builtin_ctanhl(__z); }
 
  942   template<
typename _Tp>
 
  944     tanh(
const complex<_Tp>& __z) { 
return __complex_tanh(__z.__rep()); }
 
  946   template<
typename _Tp>
 
  955   template<
typename _Tp>
 
  957     __complex_pow_unsigned(complex<_Tp> __x, 
unsigned __n)
 
  959       complex<_Tp> __y = __n % 2 ? __x : complex<_Tp>(1);
 
  977   template<
typename _Tp>
 
  982     ? 
complex<_Tp>(1) / std::__complex_pow_unsigned(__z, -(
unsigned)__n)
 
  983         : std::__complex_pow_unsigned(__z, __n);
 
  986   template<
typename _Tp>
 
  990 #ifndef _GLIBCXX_USE_C99_COMPLEX 
  994       if (__x.imag() == _Tp() && __x.real() > _Tp())
 
  995         return pow(__x.real(), __y);
 
 1001   template<
typename _Tp>
 
 1003     __complex_pow(
const complex<_Tp>& __x, 
const complex<_Tp>& __y)
 
 1004     { 
return __x == _Tp() ? _Tp() : std::
exp(__y * std::
log(__x)); }
 
 1006 #if _GLIBCXX_USE_C99_COMPLEX 
 1007   inline __complex__ 
float 
 1008   __complex_pow(__complex__ 
float __x, __complex__ 
float __y)
 
 1009   { 
return __builtin_cpowf(__x, __y); }
 
 1011   inline __complex__ 
double 
 1012   __complex_pow(__complex__ 
double __x, __complex__ 
double __y)
 
 1013   { 
return __builtin_cpow(__x, __y); }
 
 1015   inline __complex__ 
long double 
 1016   __complex_pow(
const __complex__ 
long double& __x,
 
 1017         const __complex__ 
long double& __y)
 
 1018   { 
return __builtin_cpowl(__x, __y); }
 
 1020   template<
typename _Tp>
 
 1022     pow(
const complex<_Tp>& __x, 
const complex<_Tp>& __y)
 
 1023     { 
return __complex_pow(__x.__rep(), __y.__rep()); }
 
 1025   template<
typename _Tp>
 
 1028     { 
return __complex_pow(__x, __y); }
 
 1031   template<
typename _Tp>
 
 1036                       __y.imag() * 
log(__x))
 
 1046       typedef __complex__ 
float _ComplexT;
 
 1048       _GLIBCXX_CONSTEXPR 
complex(_ComplexT __z) : _M_value(__z) { }
 
 1050       _GLIBCXX_CONSTEXPR 
complex(
float __r = 0.0f, 
float __i = 0.0f)
 
 1051 #if __cplusplus >= 201103L 
 1052       : _M_value{ __r, __i } { }
 
 1055     __real__ _M_value = __r;
 
 1056     __imag__ _M_value = __i;
 
 1063 #if __cplusplus >= 201103L 
 1066       __attribute ((__abi_tag__ (
"cxx11")))
 
 1068       real()
 const { 
return __real__ _M_value; }
 
 1070       __attribute ((__abi_tag__ (
"cxx11")))
 
 1072       imag()
 const { 
return __imag__ _M_value; }
 
 1075       real() { 
return __real__ _M_value; }
 
 1078       real()
 const { 
return __real__ _M_value; }      
 
 1081       imag() { 
return __imag__ _M_value; }
 
 1084       imag()
 const { 
return __imag__ _M_value; }
 
 1090       real(
float __val) { __real__ _M_value = __val; }
 
 1093       imag(
float __val) { __imag__ _M_value = __val; }
 
 1134       template<
typename _Tp>
 
 1138       __real__ _M_value = __z.real();
 
 1139       __imag__ _M_value = __z.imag();
 
 1143       template<
typename _Tp>
 
 1147       __real__ _M_value += __z.real();
 
 1148       __imag__ _M_value += __z.imag();
 
 1156       __real__ _M_value -= __z.real();
 
 1157       __imag__ _M_value -= __z.imag();
 
 1166       __real__ __t = __z.real();
 
 1167       __imag__ __t = __z.imag();
 
 1177       __real__ __t = __z.real();
 
 1178       __imag__ __t = __z.imag();
 
 1183       _GLIBCXX_USE_CONSTEXPR _ComplexT __rep()
 const { 
return _M_value; }
 
 1195       typedef __complex__ 
double _ComplexT;
 
 1197       _GLIBCXX_CONSTEXPR 
complex(_ComplexT __z) : _M_value(__z) { }
 
 1199       _GLIBCXX_CONSTEXPR 
complex(
double __r = 0.0, 
double __i = 0.0)
 
 1200 #if __cplusplus >= 201103L 
 1201       : _M_value{ __r, __i } { }
 
 1204     __real__ _M_value = __r;
 
 1205     __imag__ _M_value = __i;
 
 1210       : _M_value(__z.__rep()) { }
 
 1214 #if __cplusplus >= 201103L 
 1217       __attribute ((__abi_tag__ (
"cxx11")))
 
 1219       real()
 const { 
return __real__ _M_value; }
 
 1221       __attribute ((__abi_tag__ (
"cxx11")))
 
 1223       imag()
 const { 
return __imag__ _M_value; }
 
 1226       real() { 
return __real__ _M_value; }
 
 1229       real()
 const { 
return __real__ _M_value; }
 
 1232       imag() { 
return __imag__ _M_value; }
 
 1235       imag()
 const { 
return __imag__ _M_value; }
 
 1241       real(
double __val) { __real__ _M_value = __val; }
 
 1244       imag(
double __val) { __imag__ _M_value = __val; }
 
 1284       template<
typename _Tp>
 
 1288       __real__ _M_value = __z.real();
 
 1289       __imag__ _M_value = __z.imag();
 
 1293       template<
typename _Tp>
 
 1297       __real__ _M_value += __z.real();
 
 1298       __imag__ _M_value += __z.imag();
 
 1302       template<
typename _Tp>
 
 1306       __real__ _M_value -= __z.real();
 
 1307       __imag__ _M_value -= __z.imag();
 
 1311       template<
typename _Tp>
 
 1316       __real__ __t = __z.real();
 
 1317       __imag__ __t = __z.imag();
 
 1322       template<
typename _Tp>
 
 1327       __real__ __t = __z.real();
 
 1328       __imag__ __t = __z.imag();
 
 1333       _GLIBCXX_USE_CONSTEXPR _ComplexT __rep()
 const { 
return _M_value; }
 
 1345       typedef __complex__ 
long double _ComplexT;
 
 1347       _GLIBCXX_CONSTEXPR 
complex(_ComplexT __z) : _M_value(__z) { }
 
 1349       _GLIBCXX_CONSTEXPR 
complex(
long double __r = 0.0L, 
 
 1350                  long double __i = 0.0L)
 
 1351 #if __cplusplus >= 201103L 
 1352       : _M_value{ __r, __i } { }
 
 1355     __real__ _M_value = __r;
 
 1356     __imag__ _M_value = __i;
 
 1361       : _M_value(__z.__rep()) { }
 
 1364       : _M_value(__z.__rep()) { }
 
 1366 #if __cplusplus >= 201103L 
 1369       __attribute ((__abi_tag__ (
"cxx11")))
 
 1370       constexpr 
long double  
 1371       real()
 const { 
return __real__ _M_value; }
 
 1373       __attribute ((__abi_tag__ (
"cxx11")))
 
 1374       constexpr 
long double  
 1375       imag()
 const { 
return __imag__ _M_value; }
 
 1378       real() { 
return __real__ _M_value; }
 
 1381       real()
 const { 
return __real__ _M_value; }
 
 1384       imag() { 
return __imag__ _M_value; }
 
 1387       imag()
 const { 
return __imag__ _M_value; }
 
 1393       real(
long double __val) { __real__ _M_value = __val; }
 
 1396       imag(
long double __val) { __imag__ _M_value = __val; }
 
 1436       template<
typename _Tp>
 
 1440       __real__ _M_value = __z.real();
 
 1441       __imag__ _M_value = __z.imag();
 
 1445       template<
typename _Tp>
 
 1449       __real__ _M_value += __z.real();
 
 1450       __imag__ _M_value += __z.imag();
 
 1454       template<
typename _Tp>
 
 1458       __real__ _M_value -= __z.real();
 
 1459       __imag__ _M_value -= __z.imag();
 
 1463       template<
typename _Tp>
 
 1468       __real__ __t = __z.real();
 
 1469       __imag__ __t = __z.imag();
 
 1474       template<
typename _Tp>
 
 1479       __real__ __t = __z.real();
 
 1480       __imag__ __t = __z.imag();
 
 1485       _GLIBCXX_USE_CONSTEXPR _ComplexT __rep()
 const { 
return _M_value; }
 
 1493   inline _GLIBCXX_CONSTEXPR
 
 1495   : _M_value(__z.__rep()) { }
 
 1497   inline _GLIBCXX_CONSTEXPR
 
 1499   : _M_value(__z.__rep()) { }
 
 1501   inline _GLIBCXX_CONSTEXPR
 
 1503   : _M_value(__z.__rep()) { }
 
 1508 #if _GLIBCXX_EXTERN_TEMPLATE 
 1510   extern template ostream& operator<<(ostream&, const complex<float>&);
 
 1512   extern template ostream& operator<<(ostream&, const complex<double>&);
 
 1514   extern template ostream& operator<<(ostream&, const complex<long double>&);
 
 1516 #ifdef _GLIBCXX_USE_WCHAR_T 
 1518   extern template wostream& operator<<(wostream&, const complex<float>&);
 
 1520   extern template wostream& operator<<(wostream&, const complex<double>&);
 
 1522   extern template wostream& operator<<(wostream&, const complex<long double>&);
 
 1528 _GLIBCXX_END_NAMESPACE_VERSION
 
 1531 namespace __gnu_cxx _GLIBCXX_VISIBILITY(
default)
 
 1533 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 1536   template<
typename _Tp, 
typename _Up>
 
 1537     struct __promote_2<std::complex<_Tp>, _Up>
 
 1543   template<
typename _Tp, 
typename _Up>
 
 1544     struct __promote_2<_Tp, std::complex<_Up> >
 
 1550   template<
typename _Tp, 
typename _Up>
 
 1551     struct __promote_2<std::complex<_Tp>, 
std::complex<_Up> >
 
 1557 _GLIBCXX_END_NAMESPACE_VERSION
 
 1560 #if __cplusplus >= 201103L 
 1562 namespace std _GLIBCXX_VISIBILITY(default)
 
 1564 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 1577   template<
typename _Tp>
 
 1582       const _Tp __pi_2 = 1.5707963267948966192313216916397514L;
 
 1586 #if _GLIBCXX_USE_C99_COMPLEX_TR1 
 1587   inline __complex__ 
float 
 1588   __complex_acos(__complex__ 
float __z)
 
 1589   { 
return __builtin_cacosf(__z); }
 
 1591   inline __complex__ 
double 
 1592   __complex_acos(__complex__ 
double __z)
 
 1593   { 
return __builtin_cacos(__z); }
 
 1595   inline __complex__ 
long double 
 1596   __complex_acos(
const __complex__ 
long double& __z)
 
 1597   { 
return __builtin_cacosl(__z); }
 
 1599   template<
typename _Tp>
 
 1602     { 
return __complex_acos(__z.__rep()); }
 
 1607   template<
typename _Tp>
 
 1610     { 
return __complex_acos(__z); }
 
 1613   template<
typename _Tp>
 
 1622 #if _GLIBCXX_USE_C99_COMPLEX_TR1 
 1623   inline __complex__ 
float 
 1624   __complex_asin(__complex__ 
float __z)
 
 1625   { 
return __builtin_casinf(__z); }
 
 1627   inline __complex__ 
double 
 1628   __complex_asin(__complex__ 
double __z)
 
 1629   { 
return __builtin_casin(__z); }
 
 1631   inline __complex__ 
long double 
 1632   __complex_asin(
const __complex__ 
long double& __z)
 
 1633   { 
return __builtin_casinl(__z); }
 
 1635   template<
typename _Tp>
 
 1638     { 
return __complex_asin(__z.__rep()); }
 
 1643   template<
typename _Tp>
 
 1646     { 
return __complex_asin(__z); }
 
 1649   template<
typename _Tp>
 
 1653       const _Tp __r2 = __z.real() * __z.real();
 
 1654       const _Tp __x = _Tp(1.0) - __r2 - __z.imag() * __z.imag();
 
 1656       _Tp __num = __z.imag() + _Tp(1.0);
 
 1657       _Tp __den = __z.imag() - _Tp(1.0);
 
 1659       __num = __r2 + __num * __num;
 
 1660       __den = __r2 + __den * __den;
 
 1663                    _Tp(0.25) * 
log(__num / __den));
 
 1666 #if _GLIBCXX_USE_C99_COMPLEX_TR1 
 1667   inline __complex__ 
float 
 1668   __complex_atan(__complex__ 
float __z)
 
 1669   { 
return __builtin_catanf(__z); }
 
 1671   inline __complex__ 
double 
 1672   __complex_atan(__complex__ 
double __z)
 
 1673   { 
return __builtin_catan(__z); }
 
 1675   inline __complex__ 
long double 
 1676   __complex_atan(
const __complex__ 
long double& __z)
 
 1677   { 
return __builtin_catanl(__z); }
 
 1679   template<
typename _Tp>
 
 1682     { 
return __complex_atan(__z.__rep()); }
 
 1687   template<
typename _Tp>
 
 1690     { 
return __complex_atan(__z); }
 
 1693   template<
typename _Tp>
 
 1699                  + 
std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
 
 1702 #if _GLIBCXX_USE_C99_COMPLEX_TR1 
 1703   inline __complex__ 
float 
 1704   __complex_acosh(__complex__ 
float __z)
 
 1705   { 
return __builtin_cacoshf(__z); }
 
 1707   inline __complex__ 
double 
 1708   __complex_acosh(__complex__ 
double __z)
 
 1709   { 
return __builtin_cacosh(__z); }
 
 1711   inline __complex__ 
long double 
 1712   __complex_acosh(
const __complex__ 
long double& __z)
 
 1713   { 
return __builtin_cacoshl(__z); }
 
 1715   template<
typename _Tp>
 
 1718     { 
return __complex_acosh(__z.__rep()); }
 
 1723   template<
typename _Tp>
 
 1726     { 
return __complex_acosh(__z); }
 
 1729   template<
typename _Tp>
 
 1734                 * (__z.real() + __z.imag()) + _Tp(1.0),
 
 1735                 _Tp(2.0) * __z.real() * __z.imag());
 
 1741 #if _GLIBCXX_USE_C99_COMPLEX_TR1 
 1742   inline __complex__ 
float 
 1743   __complex_asinh(__complex__ 
float __z)
 
 1744   { 
return __builtin_casinhf(__z); }
 
 1746   inline __complex__ 
double 
 1747   __complex_asinh(__complex__ 
double __z)
 
 1748   { 
return __builtin_casinh(__z); }
 
 1750   inline __complex__ 
long double 
 1751   __complex_asinh(
const __complex__ 
long double& __z)
 
 1752   { 
return __builtin_casinhl(__z); }
 
 1754   template<
typename _Tp>
 
 1757     { 
return __complex_asinh(__z.__rep()); }
 
 1762   template<
typename _Tp>
 
 1765     { 
return __complex_asinh(__z); }
 
 1768   template<
typename _Tp>
 
 1772       const _Tp __i2 = __z.imag() * __z.imag();
 
 1773       const _Tp __x = _Tp(1.0) - __i2 - __z.real() * __z.real();
 
 1775       _Tp __num = _Tp(1.0) + __z.real();
 
 1776       _Tp __den = _Tp(1.0) - __z.real();
 
 1778       __num = __i2 + __num * __num;
 
 1779       __den = __i2 + __den * __den;
 
 1782                    _Tp(0.5) * atan2(_Tp(2.0) * __z.imag(), __x));
 
 1785 #if _GLIBCXX_USE_C99_COMPLEX_TR1 
 1786   inline __complex__ 
float 
 1787   __complex_atanh(__complex__ 
float __z)
 
 1788   { 
return __builtin_catanhf(__z); }
 
 1790   inline __complex__ 
double 
 1791   __complex_atanh(__complex__ 
double __z)
 
 1792   { 
return __builtin_catanh(__z); }
 
 1794   inline __complex__ 
long double 
 1795   __complex_atanh(
const __complex__ 
long double& __z)
 
 1796   { 
return __builtin_catanhl(__z); }
 
 1798   template<
typename _Tp>
 
 1801     { 
return __complex_atanh(__z.__rep()); }
 
 1806   template<
typename _Tp>
 
 1809     { 
return __complex_atanh(__z); }
 
 1812   template<
typename _Tp>
 
 1821   template<
typename _Tp>
 
 1822     inline typename __gnu_cxx::__promote<_Tp>::__type
 
 1825       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
 
 1826 #if (_GLIBCXX_USE_C99_MATH && !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC) 
 1827       return std::signbit(__x) ? __type(3.1415926535897932384626433832795029L)
 
 1834   template<
typename _Tp>
 
 1835     inline typename __gnu_cxx::__promote<_Tp>::__type
 
 1839   template<
typename _Tp>
 
 1840     inline typename __gnu_cxx::__promote<_Tp>::__type
 
 1843       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
 
 1844       return __type(__x) * __type(__x);
 
 1847   template<
typename _Tp>
 
 1848     inline typename __gnu_cxx::__promote<_Tp>::__type
 
 1852   template<
typename _Tp, 
typename _Up>
 
 1856       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
 
 1860   template<
typename _Tp, 
typename _Up>
 
 1864       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
 
 1868   template<
typename _Tp, 
typename _Up>
 
 1872       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
 
 1881   template<
typename _Tp>
 
 1885       const _Tp __den = (__z.real() * __z.real()
 
 1886              + __z.imag() * __z.imag() + _Tp(1.0));
 
 1889                    (_Tp(2.0) * __z.imag()) / __den);
 
 1892 #if _GLIBCXX_USE_C99_COMPLEX 
 1893   inline __complex__ 
float 
 1894   __complex_proj(__complex__ 
float __z)
 
 1895   { 
return __builtin_cprojf(__z); }
 
 1897   inline __complex__ 
double 
 1898   __complex_proj(__complex__ 
double __z)
 
 1899   { 
return __builtin_cproj(__z); }
 
 1901   inline __complex__ 
long double 
 1902   __complex_proj(
const __complex__ 
long double& __z)
 
 1903   { 
return __builtin_cprojl(__z); }
 
 1905   template<
typename _Tp>
 
 1908     { 
return __complex_proj(__z.__rep()); }
 
 1910   template<
typename _Tp>
 
 1913     { 
return __complex_proj(__z); }
 
 1917   template<
typename _Tp>
 
 1918     inline typename __gnu_cxx::__promote<_Tp>::__type
 
 1922   template<
typename _Tp>
 
 1923     inline typename __gnu_cxx::__promote<_Tp>::__type
 
 1927 #if __cplusplus > 201103L 
 1929 inline namespace literals {
 
 1930 inline namespace complex_literals {
 
 1933   operator""if(
long double __num)
 
 1937   operator""if(
unsigned long long __num)
 
 1941   operator""i(
long double __num)
 
 1945   operator""i(
unsigned long long __num)
 
 1949   operator""il(
long double __num)
 
 1953   operator""il(
unsigned long long __num)
 
 1961 _GLIBCXX_END_NAMESPACE_VERSION
 
complex< _Tp > operator+(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x plus y. 
 
26.2.3 complex specializations complex<long double> specialization 
 
static const iostate failbit
Indicates that an input operation failed to read the expected characters, or that an output operation...
 
std::complex< _Tp > asin(const std::complex< _Tp > &)
asin(__z) [8.1.3]. 
 
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z. 
 
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z. 
 
streamsize precision() const 
Flags access. 
 
complex< _Tp > & operator-=(const _Tp &__t)
Subtract t from this complex number. 
 
basic_istream< wchar_t > wistream
Base class for wchar_t input streams. 
 
Template class basic_istream. 
 
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z. 
 
basic_ostream< wchar_t > wostream
Base class for wchar_t output streams. 
 
26.2.3 complex specializations complex<float> specialization 
 
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z. 
 
complex< _Tp > pow(const complex< _Tp > &, int)
Return x to the y'th power. 
 
std::complex< _Tp > atanh(const std::complex< _Tp > &)
atanh(__z) [8.1.7]. 
 
complex< _Tp > & operator/=(const _Tp &)
Divide this complex number by t. 
 
complex< _Tp > & operator+=(const _Tp &__t)
Add t to this complex number. 
 
std::complex< _Tp > asinh(const std::complex< _Tp > &)
asinh(__z) [8.1.6]. 
 
_Tp norm(const complex< _Tp > &)
Return z magnitude squared. 
 
complex< _Tp > sinh(const complex< _Tp > &)
Return complex hyperbolic sine of z. 
 
complex< _Tp > & operator=(const _Tp &)
Assign this complex number to scalar t. 
 
basic_istream< char > istream
Base class for char input streams. 
 
constexpr complex(const complex< _Up > &__z)
Copy constructor. 
 
const _Tp & max(const _Tp &, const _Tp &)
This does what you think it does. 
 
std::complex< _Tp > acosh(const std::complex< _Tp > &)
acosh(__z) [8.1.5]. 
 
std::complex< _Tp > acos(const std::complex< _Tp > &)
acos(__z) [8.1.2]. 
 
complex< _Tp > polar(const _Tp &, const _Tp &=0)
Return complex with magnitude rho and angle theta. 
 
_Tp abs(const complex< _Tp > &)
Return magnitude of z. 
 
26.2.3 complex specializations complex<double> specialization 
 
locale imbue(const locale &__loc)
Moves to a new locale. 
 
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z. 
 
_Tp arg(const complex< _Tp > &)
Return phase angle of z. 
 
complex< _Tp > & operator*=(const _Tp &)
Multiply this complex number by t. 
 
void setstate(iostate __state)
Sets additional flags in the error state. 
 
complex< _Tp > operator-(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x minus y. 
 
basic_ostream< char > ostream
Base class for char output streams. 
 
__istream_type & putback(char_type __c)
Unextracting a single character. 
 
complex< _Tp > log10(const complex< _Tp > &)
Return complex base 10 logarithm of z. 
 
_Tp value_type
Value typedef. 
 
constexpr complex(const _Tp &__r=_Tp(), const _Tp &__i=_Tp())
Default constructor. First parameter is x, second parameter is y. Unspecified parameters default to 0...
 
complex< _Tp > operator*(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x times y. 
 
bitset< _Nb > operator>>(size_t __position) const noexcept
Self-explanatory. 
 
Controlling output for std::string. 
 
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z. 
 
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z. 
 
complex< _Tp > operator/(const complex< _Tp > &__x, const complex< _Tp > &__y)
Return new complex value x divided by y. 
 
complex< _Tp > conj(const complex< _Tp > &)
Return complex conjugate of z. 
 
fmtflags flags() const 
Access to format flags. 
 
std::complex< _Tp > atan(const std::complex< _Tp > &)
atan(__z) [8.1.4]. 
 
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z. 
 
__string_type str() const 
Copying out the string buffer. 
 
_Tp fabs(const std::complex< _Tp > &)
fabs(__z) [8.1.8].