我试图实现定义为in this answer的随机数生成器。至少从我的知识来看,至少应该如何实现第一行static unsigned long x=123456789, y=362436069, z=521288629;
,因为它在功能之外被显示出来有一些含糊不清的地方。我以为这是打算作为一个类的成员,从而实现了它:在类成员上使用`^ =`和`<<`时出现C++总线错误`unsigned long`
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();
}
出于某种原因,这给了我错误的注意位置,这取决于我和编译的模式。但是,如果我注释掉成员变量和构造函数并使用静态变量,则一切正常。如果这是正确的代码,我不明白为什么它在链接上显示的不同,并且无论哪种方式,我不知道错误发生的原因。
这声明了一个指向rng2的指针,叫做prand并将它指定给一个指向rng2对象的新实例的指针。应该工作吧?我不明白你的评论。 – vidstige 2011-12-15 08:55:13
哦,对,thansk! – vidstige 2011-12-15 09:08:32