【问题标题】:How to generate not repeated random variables by Mersenne TwisterMersenne Twister 如何生成不重复的随机变量
【发布时间】:2014-03-01 11:12:42
【问题描述】:

我想生成 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 并且仅测试 X。

标签: c++


【解决方案1】:

您需要在循环中重置x - 现在,一旦x &gt;= exp(-3) 的条件变为假,代码将永远不会调用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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2017-04-05
    • 1970-01-01
    • 2017-06-10
    • 2014-02-22
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多