哪位高手能帮帮小弟我将下面的代码翻译成Delphi的代码,多谢
谁能帮帮我将下面的代码翻译成Delphi的代码,谢谢
//一个很棒的随机数发生器
#define CMATH_TEMPERING_SHIFT_U(y) (y > > 11)
#define CMATH_TEMPERING_SHIFT_S(y) (y < < 7)
#define CMATH_TEMPERING_SHIFT_T(y) (y < < 15)
#define CMATH_TEMPERING_SHIFT_L(y) (y > > 18)
class CRandom
{
private:
//data
unsigned int rseed;
unsigned long mt[CMATH_N];
int mti;
public:
CRandom(void);
unsigned int Random(unsigned int n);
void SetRandomSeed(unsigned int n);
unsigned int GetRandomSeed(void);
void Randomize(void);
};
CRandom::CRandom(void)
{
rseed = 1;
mti = CMATH_N + 1;
}
unsigned int CRandom::Random(unsigned int n)
{
unsigned long y;
static unsigned long mag01[2] = {0x0, CMATH_MATRIX_A};
if(n == 0)
return (0);
if(mti > = CMATH_N)
{
int kk;
if(mti == CMATH_N + 1)
SetRandomSeed(4357);
for(kk = 0; kk < CMATH_N - CMATH_M; kk++)
{
y = (mt[kk]&CMATH_UPPER_MASK) | (mt[kk + 1] & CMATH_LOWER_MASK);
mt[kk] = mt[kk + CMATH_M] ^ (y > > 1) ^ mag01[y & 0x1];
}
for(; kk < CMATH_N - 1; kk++)
{
y = (mt[kk]&CMATH_UPPER_MASK) | (mt[kk + 1] & CMATH_LOWER_MASK);
mt[kk] = mt[kk + (CMATH_M - CMATH_N)] ^ (y > > 1) ^ mag01[y & 0x1];
mti = 0;
}
}
y = mt[mti + 1];
y ^= CMATH_TEMPERING_SHIFT_U(y);
y ^= CMATH_TEMPERING_SHIFT_S(y) & CMATH_TEMPERING_MASK_B;
y ^= CMATH_TEMPERING_SHIFT_T(y) & CMATH_TEMPERING_MASK_C;
y ^= CMATH_TEMPERING_SHIFT_L(y);
return (y & n)
}
void CRandom::SetRandomSeed(unsigned int n)
{
mt[0] = n & 0xffffffff;
for(mti = 1; mti < CMATH_N; mti++)
mt[mti] = (69069 * mt[mti - 1]) & 0xffffffff;
rseed = n;
}
unsigned int CRandom::GetRandomSeed(void)
{
return (rseed);
}
void CRandom::Randomize(void)
{
SetRandomSeed(time(NULL));
}
------解决方案--------------------
这句什么意思?CMATH_TEMPERING_SHIFT_U(y)(y > > 11)
其他的好像都好翻译的
------解决方案--------------------
不知棒在哪里?
------解决方案--------------------
定义宏吧,把他写成一个函数吧!
------解决方案--------------------
给分
------解决方案--------------------
有标准随机数函数
Randomize();
//一个很棒的随机数发生器
#define CMATH_TEMPERING_SHIFT_U(y) (y > > 11)
#define CMATH_TEMPERING_SHIFT_S(y) (y < < 7)
#define CMATH_TEMPERING_SHIFT_T(y) (y < < 15)
#define CMATH_TEMPERING_SHIFT_L(y) (y > > 18)
class CRandom
{
private:
//data
unsigned int rseed;
unsigned long mt[CMATH_N];
int mti;
public:
CRandom(void);
unsigned int Random(unsigned int n);
void SetRandomSeed(unsigned int n);
unsigned int GetRandomSeed(void);
void Randomize(void);
};
CRandom::CRandom(void)
{
rseed = 1;
mti = CMATH_N + 1;
}
unsigned int CRandom::Random(unsigned int n)
{
unsigned long y;
static unsigned long mag01[2] = {0x0, CMATH_MATRIX_A};
if(n == 0)
return (0);
if(mti > = CMATH_N)
{
int kk;
if(mti == CMATH_N + 1)
SetRandomSeed(4357);
for(kk = 0; kk < CMATH_N - CMATH_M; kk++)
{
y = (mt[kk]&CMATH_UPPER_MASK) | (mt[kk + 1] & CMATH_LOWER_MASK);
mt[kk] = mt[kk + CMATH_M] ^ (y > > 1) ^ mag01[y & 0x1];
}
for(; kk < CMATH_N - 1; kk++)
{
y = (mt[kk]&CMATH_UPPER_MASK) | (mt[kk + 1] & CMATH_LOWER_MASK);
mt[kk] = mt[kk + (CMATH_M - CMATH_N)] ^ (y > > 1) ^ mag01[y & 0x1];
mti = 0;
}
}
y = mt[mti + 1];
y ^= CMATH_TEMPERING_SHIFT_U(y);
y ^= CMATH_TEMPERING_SHIFT_S(y) & CMATH_TEMPERING_MASK_B;
y ^= CMATH_TEMPERING_SHIFT_T(y) & CMATH_TEMPERING_MASK_C;
y ^= CMATH_TEMPERING_SHIFT_L(y);
return (y & n)
}
void CRandom::SetRandomSeed(unsigned int n)
{
mt[0] = n & 0xffffffff;
for(mti = 1; mti < CMATH_N; mti++)
mt[mti] = (69069 * mt[mti - 1]) & 0xffffffff;
rseed = n;
}
unsigned int CRandom::GetRandomSeed(void)
{
return (rseed);
}
void CRandom::Randomize(void)
{
SetRandomSeed(time(NULL));
}
------解决方案--------------------
这句什么意思?CMATH_TEMPERING_SHIFT_U(y)(y > > 11)
其他的好像都好翻译的
------解决方案--------------------
不知棒在哪里?
------解决方案--------------------
定义宏吧,把他写成一个函数吧!
------解决方案--------------------
给分
------解决方案--------------------
有标准随机数函数
Randomize();