メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcMTRand64.h

説明を見る。
00001 
00016 #ifndef DKUTIL_C_MT_RAND64_H
00017 #define DKUTIL_C_MT_RAND64_H
00018 
00019 
00020 #ifdef INDEPENDENT_DKC_MT
00021 #   include "define.h"
00022 #else
00023 #   include <dkutil_c/dkutil_cstd/define.h>
00024 #endif
00025 #include <stdio.h>
00026 
00027 #define dkcdMT_RAND64_NN 312
00028 typedef struct dkc_Mersenne_Twister_64bit{
00030     uint64 state[dkcdMT_RAND64_NN];
00031     uint64 output[dkcdMT_RAND64_NN];
00032     int index;
00033     char *mallocPtr;
00034     void *function_ptr;
00035 }DKC_MT_RAND64;
00036 
00037 typedef void (*DKC_MT_RAND64_GENERATE_F_TYPE)(  DKC_MT_RAND64 * );
00038 
00039 
00040 DKC_EXTERN DKC_MT_RAND64 *WINAPI dkcAllocMTRand64(uint64 seed);
00041 
00042 DKC_EXTERN int WINAPI dkcFreeMTRand64(DKC_MT_RAND64 **p);
00043 
00044 
00048 DKC_EXTERN void WINAPI dkcMTRand64Init(DKC_MT_RAND64 *p,uint64 seed);
00052 DKC_EXTERN void WINAPI 
00053     dkcMTRand64InitByArray(DKC_MT_RAND64 *p,uint64 *init_key,uint64 key_length);
00054 
00055 
00056 DKC_EXTERN uint64 WINAPI dkcMTRand64Get(DKC_MT_RAND64 *p);
00057 
00058 DKC_EXTERN void dkcMTRand64Next_C(DKC_MT_RAND64 *p);
00059 
00063 
00064 DKC_INLINE void dkcMTRand64SetNextFunction(DKC_MT_RAND64 *p,DKC_MT_RAND64_GENERATE_F_TYPE f)
00065 {
00066     p->function_ptr = f;
00067 }
00068 
00070 DKC_INLINE uint64 dkcMTRand64Get_INL(DKC_MT_RAND64 *p)
00071 {
00072 
00073     uint64 x;
00074     
00075     if (p->index >= dkcdMT_RAND64_NN) { /* generate NN words at one time */
00076             DKC_MT_RAND64_GENERATE_F_TYPE fp;
00077             fp = p->function_ptr;
00078             fp(p);
00079     }
00080     x = p->output[(p->index)++];
00081     
00082     /*
00083         x ^= (x >> 29) & dkcmUINT64DEFINE(0x5555555555555555);
00084     x ^= (x << 17) & dkcmUINT64DEFINE(0x71D67FFFEDA60000);
00085     x ^= (x << 37) & dkcmUINT64DEFINE(0xFFF7EEE000000000);
00086     x ^= (x >> 43);
00087         */
00088     return x;
00089 }
00090 
00091 
00092 
00094 DKC_INLINE int64 dkcMTRand64_Get63(DKC_MT_RAND64 *p)
00095 {
00096     return (int64)(dkcMTRand64Get(p) >> 1);
00097 }
00098 
00100 DKC_INLINE double dkcMTRand64_real1(DKC_MT_RAND64 *p)
00101 {
00102     return (dkcMTRand64Get(p) >> 11) * (1.0/9007199254740991.0);
00103 }
00104 
00106 DKC_INLINE double dkcMTRand64_real2(DKC_MT_RAND64 *p)
00107 {
00108     return (dkcMTRand64Get(p) >> 11) * (1.0/9007199254740992.0);
00109 }
00110 
00112 DKC_INLINE double dkcMTRand64_real3(DKC_MT_RAND64 *p)
00113 {
00114     return ((dkcMTRand64Get(p) >> 12) + 0.5) * (1.0/4503599627370496.0);
00115 }
00116 #endif
00117 
00118 
00119 

dKingyoMersenneTwisterLibraryに対してThu Jan 19 05:10:23 2006に生成されました。  doxygen 1.4.4