This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
// File: crn_rand.h
|
||||
// See Copyright Notice and license at the end of inc/crnlib.h
|
||||
#pragma once
|
||||
|
||||
namespace crnlib
|
||||
{
|
||||
class kiss99
|
||||
{
|
||||
public:
|
||||
kiss99();
|
||||
|
||||
void seed(uint32 i, uint32 j, uint32 k);
|
||||
|
||||
inline uint32 next();
|
||||
|
||||
private:
|
||||
uint32 x;
|
||||
uint32 y;
|
||||
uint32 z;
|
||||
uint32 c;
|
||||
};
|
||||
|
||||
class well512
|
||||
{
|
||||
public:
|
||||
well512();
|
||||
|
||||
enum { cStateSize = 16 };
|
||||
void seed(uint32 seed[cStateSize]);
|
||||
void seed(uint32 seed);
|
||||
void seed(uint32 seed1, uint32 seed2, uint32 seed3);
|
||||
|
||||
inline uint32 next();
|
||||
|
||||
private:
|
||||
uint32 m_state[cStateSize];
|
||||
uint32 m_index;
|
||||
};
|
||||
|
||||
class ranctx
|
||||
{
|
||||
public:
|
||||
ranctx() { seed(0xDE149737); }
|
||||
|
||||
void seed(uint32 seed);
|
||||
|
||||
inline uint32 next();
|
||||
|
||||
private:
|
||||
uint32 a;
|
||||
uint32 b;
|
||||
uint32 c;
|
||||
uint32 d;
|
||||
};
|
||||
|
||||
class random
|
||||
{
|
||||
public:
|
||||
random();
|
||||
random(uint32 i);
|
||||
|
||||
void seed(uint32 i);
|
||||
void seed(uint32 i1, uint32 i2, uint32 i3);
|
||||
|
||||
uint32 urand32();
|
||||
|
||||
// "Fast" variant uses no multiplies.
|
||||
uint32 fast_urand32();
|
||||
|
||||
uint32 bit();
|
||||
|
||||
// Returns random between [0, 1)
|
||||
double drand(double l, double h);
|
||||
|
||||
float frand(float l, float h);
|
||||
|
||||
// Returns random between [l, h)
|
||||
int irand(int l, int h);
|
||||
|
||||
double gaussian(double mean, double stddev);
|
||||
|
||||
void test();
|
||||
|
||||
private:
|
||||
ranctx m_ranctx;
|
||||
kiss99 m_kiss99;
|
||||
well512 m_well512;
|
||||
};
|
||||
|
||||
// Simpler, minimal state PRNG
|
||||
class fast_random
|
||||
{
|
||||
public:
|
||||
fast_random();
|
||||
fast_random(uint32 i);
|
||||
fast_random(const fast_random& other);
|
||||
fast_random& operator=(const fast_random& other);
|
||||
|
||||
void seed(uint32 i);
|
||||
|
||||
uint32 urand32();
|
||||
|
||||
int irand(int l, int h);
|
||||
|
||||
double drand(double l, double h);
|
||||
|
||||
float frand(float l, float h);
|
||||
|
||||
private:
|
||||
uint32 jsr;
|
||||
uint32 jcong;
|
||||
};
|
||||
|
||||
} // namespace crnlib
|
||||
Reference in New Issue
Block a user