【发布时间】:2012-01-20 23:27:31
【问题描述】:
我正在尝试实现定义in this answer 的随机数生成器。至少据我所知,关于第一行 static unsigned long x=123456789, y=362436069, z=521288629; 应该如何实现存在一些歧义,因为它显示在函数之外。我假设它是作为一个类成员并因此实现的:
class rng2{
public:
unsigned long x, y, z;
rng2() : x(123456789), y(362436069), z(521288629) {}
unsigned long xorshf96(void) { //period 2^96-1
//static unsigned long x=123456789, y=362436069, z=521288629;
unsigned long t;
x ^= x << 16; //BUS ERROR, debug mode
x ^= x >> 5;
x ^= x << 1;
t = x;
x = y; //SEG FAULT, release mode
y = z;
z = t ^ x ^ y;
return z;
}
};
int main ()
{
rng2 rand2;
rng2 * prand;
for(long d =0; d < 10000; d++)
cout << "\n" << (*prand).xorshf96();
}
由于某种原因,这会在指定位置出现错误,具体取决于我使用的编译模式。但是,如果我注释掉成员变量和构造函数并改用静态变量,一切正常。如果这是正确的代码,我看不出为什么它在链接中显示不同,无论哪种方式,我都不知道为什么会发生错误。
【问题讨论】:
标签: c++ bit-manipulation unsigned binary-operators