如何通过Mersenne Twister生成不重复的随机变量

How to generate not repeated random variables by Mersenne Twister

本文关键字:随机 变量 何通过 Mersenne Twister      更新时间:2023-10-16

我想生成1000个不同的k值并计算k的均值和方差,但是当我使用MT时,它在电子表格中始终是相同的数字。以下是我的代码,希望有人可以帮助我。非常感谢!

int main(int argc,char * const argv []){

int simNum=1000;
double x=1;
int k=0;
ofstream fout("hw2(part 2-b).csv");
int seed=time(0);
MTRand_open mt(seed);

for(int i=0;i<simNum;i++)
{

    while(x>=exp(-3))
    {
        x*=mt();
        k++;
    }

    fout<<i<<","<<x<<","<<k-1<<endl;
}
system("Pause");
return 0;

}

您需要在循环中重置x - 现在,一旦x >= exp(-3)的条件变为false,代码将永远不会调用mt()函数以获取另一个随机数。

for(int i=0;i<simNum;i++)
{

    while(x>=exp(-3))
    {
        x*=mt();
        k++;
    }

    fout<<i<<","<<x<<","<<k-1<<endl;
    x = 1; // <-- reset x
}