SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送
メインページ   名前空間一覧   クラス階層   構成   ファイル一覧   名前空間メンバ   構成メンバ   ファイルメンバ  

dKingyoRandom_MT_SSE2.h

解説を見る。
00001 
00002 
00003 #ifndef _dKingyoRandom_MT_SSE2__h
00004 #define _dKingyoRandom_MT_SSE2__h
00005 
00006 #include "mymt.h"
00007 #include "AllLoad.h"
00008 #include "dkutilMath.h"
00009 
00010 #pragma comment(lib,"mymt")
00011 
00012 namespace dkutil{//begin dkutil namespace
00013     namespace math{//begin math namespace
00014 /*
00015     int i, ret;
00016     myMT_t *mt;
00017 
00018     mt = myMT_Init();
00019     myMT_SetSeed(mt, SEED);
00020 
00021     printf("test of myMT\n");
00022     for (i = 0; i < 16; i++) {
00023         int j;
00024         for (j = 0; j < 4; j++) {
00025             printf("%08X", myMT_GetInt32(mt));
00026         }
00027         printf("\n");
00028     }
00029 
00030     myMT_SetSeed(mt, SEED);
00031     elapsed();
00032     ret = 0;
00033     for (i = 0; i < 100000000; i++) {
00034         ret += myMT_GetInt32(mt);
00035     }
00036     printf("asm version ret=%08X  %ftime\n", ret, elapsed());
00037 
00038     if (0) {
00039         unsigned int seed[624];
00040         memset(seed, 2, sizeof(seed));
00041         seed[0] = 1;
00042         myMT_SetSeeds(mt, seed, 624);
00043         ret = 0;
00044         for (i = 0; i < 10000000; i++) { ret += myMT_GetInt32(mt); }
00045         printf("ret=%08X\n", myMT_GetInt32(mt));
00046 
00047         myMT_SetSeeds(mt, seed, 623);
00048         ret = 0;
00049         for (i = 0; i < 10000000; i++) { ret += myMT_GetInt32(mt); }
00050         printf("ret=%08X\n", myMT_GetInt32(mt));
00051 
00052         seed[623] = 1;
00053         myMT_SetSeeds(mt, seed, 624);
00054         ret = 0;
00055         for (i = 0; i < 10000000; i++) { ret += myMT_GetInt32(mt); }
00056         printf("ret=%08X\n", myMT_GetInt32(mt));
00057     }
00058 
00059     myMT_Term(mt);
00060     
00061 */
00062 template<class T,DWORD RANDMAX_ = INT_MAX>
00063 class INL_dKingyoRandom_MT_SSE2{
00064 protected:
00065     myMT_t *mt;
00066     ULONG m_ulSeed;
00067     T m_Max;
00068 public:
00069     INL_dKingyoRandom_MT_SSE2(T seed=timeGetTime())
00070     {       
00071         if(seed<0){seed = -seed;}
00072         m_Max=RANDMAX_;
00073          m_ulSeed  =seed;
00074         mt = myMT_Init();
00075         myMT_SetSeed(mt, (UINT)m_ulSeed);
00076     }
00077     ~INL_dKingyoRandom_MT_SSE2(){
00078         myMT_Term(mt);
00079     }
00080     inline T Rand(){
00081         return myMT_GetInt32(mt);
00082     }
00083     
00084     inline T Random(T domain){
00085         return myMT_GetInt32(mt) * domain / m_Max;
00086     }
00087     inline  T RandomDomain(T min,T max){
00088 
00089         //return max += Random(max + min);
00090         //return max-=Random(max-min);
00091         return (max-min)*Rand()+min;
00092 
00093     }
00094     inline T RandomDomainSafety(T min,T max){
00095         if(min>max){SWAP_NUM(min,max);}
00096         MINMAX_ABS(min,max);
00097         MINMAX_SAFETY(min,max);
00098         return RandomDomain(min,max);
00099     }
00100     inline void SetSeed(UINT seed){
00101         m_ulSeed = seed;
00102         myMT_SetSeed(mt, (UINT)m_ulSeed);
00103     }
00104     inline ULONG GetSeed(){return m_ulSeed;}
00105     inline DWORD GetRandMax(){return m_Max;}
00106 };
00107 template<typename T,DWORD RANDMAX_ = INT_MAX>
00108 class dKingyoRandom_MT_SSE2 : public dKingyoRandom_BasicMember<T>{
00109 protected:
00110     INL_dKingyoRandom_MT_SSE2<T> mtsse;
00111 public:
00112     dKingyoRandom_MT_SSE2(T seed=timeGetTime())
00113     {       
00114         m_Max = RANDMAX_;//(RAMD_MAX)
00115         if(seed<0){seed = -seed;}
00116          m_ulSeed = m_Seed =seed;
00117         mtsse.SetSeed(m_ulSeed);
00118     }
00119     ~dKingyoRandom_MT_SSE2(){
00120     }
00121     virtual T Rand(){
00122         return mtsse.Rand();
00123     }
00124     
00125     virtual T Random(T domain){
00126         return Rand() * domain / m_Max;
00127     }
00128     virtual T RandomDomain(T min,T max){
00129 
00130         //return max += Random(max + min);
00131         //return max-=Random(max-min);
00132         return mtsse.RandomDomain(min,max);
00133 
00134     }
00135     virtual T RandomDomainSafety(T min,T max){
00136         if(min>max){SWAP_NUM(min,max);}
00137         MINMAX_ABS(min,max);
00138         MINMAX_SAFETY(min,max);
00139         return RandomDomain(min,max);
00140     }
00141     virtual void SetSeed(T set){
00142         mtsse.SetSeed((UINT)set);
00143     }
00144     
00145     
00146     
00147 };
00148 
00149 class dKingyoRandom_MT_SSE2_EX : public dKingyoRandom_MT_SSE2<ULONG>{
00150 public:
00151     dKingyoRandom_MT_SSE2_EX(){}
00152 };
00153 
00154 }//end of math namespace
00155 }//end of dkutil namespace
00156 
00157 
00158 #endif //end of _dKingyoRandom_MT_SSE2__h

dKingyoUtilClass (dkutil)に対してMon Jun 9 01:32:41 2003に生成されました。 doxygen1.3