OROCHI
 
Loading...
Searching...
No Matches
GxRandom.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12#include <limits.h>
13
14GX_CORE_NAMESPACE_BEGIN()
15
16//===========================================================================
18//===========================================================================
20{
21 //-----------------------------------------------------------
23 //-----------------------------------------------------------
25public:
27 GxRandom(void){}
29 virtual ~GxRandom(void){}
32
33
34 //-----------------------------------------------------------
36 //-----------------------------------------------------------
38public:
40 virtual void initialize(u32 seed) = 0;
42 virtual u32 getRandomU32(void) = 0;
44 GX_FORCE_INLINE f32 getRandomF32(void){ return static_cast<f32>(getRandomU32()) / static_cast<f32>(UINT_MAX); }
46 GX_FORCE_INLINE f32 getRandomF32( f32 min, f32 max ){ return getRandomF32() * ( max - min ) + min; }
48 GX_FORCE_INLINE f64 getRandomF64(void){ return static_cast<f64>((static_cast<u64>(getRandomU32()) << 32) | static_cast<u64>(getRandomU32())) / static_cast<f64>(ULLONG_MAX); }
49
51};
52
53//===========================================================================
55//===========================================================================
57{
58 //-----------------------------------------------------------
60 //-----------------------------------------------------------
62public:
64 static constexpr u32 MAX_TABLE = 624;
65
67 //-----------------------------------------------------------
69 //-----------------------------------------------------------
71
77 ~GxRandomMersenneTwister(void) override {}
80
81
82 void initialize(u32 seed) override;
83
85 //-----------------------------------------------------------
87 //-----------------------------------------------------------
89
91 u32 getRandomU32(void) override;
92
94 //-----------------------------------------------------------
96 //-----------------------------------------------------------
98private:
100 void updateTable(void);
101
103 //-----------------------------------------------------------
105 //-----------------------------------------------------------
107private:
108 u32 _table[MAX_TABLE];
109 u32 _counter;
110
112};
113
114GX_CORE_NAMESPACE_END()
115
116#define GX_DRAND() GxThread::getCurrentThread()->getRandomGenerator()->getRandomF64()
117#define GX_FRAND() GxThread::getCurrentThread()->getRandomGenerator()->getRandomF32()
118#define GX_FRAND_MIN_MAX( min, max ) GxThread::getCurrentThread()->getRandomGenerator()->getRandomF32( min, max )
119#define GX_RAND() GxThread::getCurrentThread()->getRandomGenerator()->getRandomU32()
120#define GX_SET_RANDOM_SEED(seed) GxThread::getCurrentThread()->getRandomGenerator()->initialize(seed)
#define GX_PROHIBIT_COPY(__CLASS__)
コピー禁止
Definition GxBase.h:233
乱数クラス
Definition GxRandom.h:20
GX_FORCE_INLINE f32 getRandomF32(void)
乱数生成(32bit浮動少数)
Definition GxRandom.h:44
virtual void initialize(u32 seed)=0
初期化
GX_FORCE_INLINE f32 getRandomF32(f32 min, f32 max)
乱数生成(32bit浮動少数,範囲指定)
Definition GxRandom.h:46
GX_FORCE_INLINE f64 getRandomF64(void)
乱数生成(64bit浮動少数)
Definition GxRandom.h:48
virtual ~GxRandom(void)
デストラクタ
Definition GxRandom.h:29
virtual u32 getRandomU32(void)=0
乱数生成(整数)
GxRandom(void)
デフォルトコンストラクタ
Definition GxRandom.h:27
メルセンヌツイスター乱数クラス
Definition GxRandom.h:57
static constexpr u32 MAX_TABLE
テーブル数
Definition GxRandom.h:64
~GxRandomMersenneTwister(void) override
デストラクタ
Definition GxRandom.h:77
u32 getRandomU32(void) override
乱数生成(整数)
Definition GxRandom.cpp:51
GxRandomMersenneTwister(void)
デフォルトコンストラクタ
Definition GxRandom.cpp:17
void initialize(u32 seed) override
コピー禁止宣言
Definition GxRandom.cpp:36