- 107 名前:579 mailto:sage [2009/01/30(金) 00:30:37 ]
- >>50 こうですね。わかります。
template<int s,int n,int p>struct M0; template<int s,int n>struct MT{enum{N=M0<s,n,(n>>31)>::N};}; template<int s>struct M0<s,-624,-1>{enum{N=s};}; template<int s,int n>struct M0<s,n,-1>{enum{ P=M0<s,n-1,-1>::N, N=(1812433253UL*(P^(P>>30))+n+624)&0xffffffffUL}; }; template<int s,int n>struct M0<s,n,0>{enum{ P=MT<s,n-624>::N&0x80000000UL, Q=MT<s,n-623>::N&0x7fffffffUL, R=MT<s,n-227>::N, S=Q&1?0x9908b0dfUL:0UL, N=R^((P|Q)>>1)^S}; }; template<int s,int n>struct T{enum{ P=MT<s,n>::N, Q=P^(P>>11), R=Q^(Q<<7)&0x9d2c5680UL, S=R^(R<<15)&0xefc60000UL, N=S^(S>>18)}; }; template<int s,int n>struct S; template<int s>struct S<s,0>{enum{N=0};}; template<int s,int n>struct S{enum{ N=(unsigned)S<s,n-1>::N+(unsigned)T<s,n-1>::N&0xffffffffUL}; };
|

|