45 template<
int_t I,
int_t M,
class W1,
class W,
int Accuracy>
47 typedef typename Mult<W1,W>::Result Result;
69 template<
class W1,
int_t N,
int Accuracy,
class W,
int_t Count,
int_t I = 2>
70 struct __RootListLoop {
71 typedef typename Simplify<SRational<SInt<2*I>,
SInt<N> > >::Result SF;
73 typedef typename GetNextRoot<SF::Numer::value,SF::Denom::value,W1,W,Accuracy>::Result WW;
74 typedef Compute<typename WW::Re,Accuracy> CRe;
75 typedef Compute<typename WW::Im,Accuracy> CIm;
76 typedef typename __RootListLoop<W1,N,Accuracy,WW,Count,I+1>::Result Next;
77 typedef Loki::Typelist<Pair<CRe,CIm>,Next> Result;
80 template<
class W1,
int_t N,
int Accuracy,
class W,
int_t Count>
81 struct __RootListLoop<W1,N,Accuracy,W,Count,Count> {
82 typedef Loki::NullType Result;
86 struct GenerateSymmetricPart;
88 template<
class H,
class T>
89 struct GenerateSymmetricPart<Loki::Typelist<H,T> > {
90 typedef typename H::first T1;
91 typedef typename Negate<typename H::second::BigInt>::Result T2;
92 typedef typename GenerateSymmetricPart<T>::Result Next;
93 typedef Loki::Typelist<Pair<T1,T2>,Next> Result;
97 struct GenerateSymmetricPart<Loki::NullType> {
98 typedef Loki::NullType Result;
102 template<
int_t N,
int S,
int Accuracy>
105 typedef typename SinPiDecimal<2,N,Accuracy>::Result Sin2;
107 typedef typename Loki::Select<(S<0),Sin2,
108 typename Negate<Sin2>::Result>::Result WI;
113 typedef typename CosPiDecimal<2,N,Accuracy>::Result WR;
117 typedef MComplex<WR,WI> Result;
122 template<
int_t N,
int S,
int Accuracy>
123 class GenerateRootList
125 typedef typename GetFirstRoot<N,-S,Accuracy>::Result W1;
128 typedef Compute<typename W1::Re,Accuracy> CRe;
129 typedef Compute<typename W1::Im,Accuracy> CIm;
130 typedef Loki::Typelist<Pair<CRe,CIm>,
typename __RootListLoop<W1,N,Accuracy,W1,(N%2==0) ? N/2 : N/2+1>::Result> FirstHalf;
131 typedef typename Loki::Select<(N%2==0),
132 typename Loki::TL::Append<FirstHalf,
typename GenerateRootList<2,S,Accuracy>::Result>::Result,FirstHalf>::Result FirstHalfMod;
137 typedef FirstHalf Result;
140 template<
int S,
int Accuracy>
141 class GenerateRootList<2,S,Accuracy> {
142 typedef Compute<
SInt<-1>,Accuracy> CRe;
143 typedef Compute<SInt<0>, Accuracy> CIm;
145 typedef Loki::Typelist<Pair<CRe,CIm>,Loki::NullType> Result;
148 template<
int S,
int Accuracy>
149 class GenerateRootList<1,S,Accuracy> {
151 typedef Loki::NullType Result;