gpt4 book ai didi

c++ - 无法使用种子生成高斯分布

转载 作者:太空狗 更新时间:2023-10-29 20:59:39 39 4
gpt4 key购买 nike

我正在尝试在 visual studio C++ 2010 中制作高斯分布。每次运行时我都希望得到不同的结果。但是当我运行这段代码三次时,结果是一样的:

#include <iostream>
#include <random>
int roundnew(double d)
{
return floor(d + 0.5);
}
int main()
{
std::default_random_engine generator;
std::normal_distribution<double> distribution(10,1);

for (int n = 0; n < 12; ++n) {
printf("%d\n",roundnew(distribution(generator)));
}

return 0;
}

结果是

10
9
11
9
10
11
10
9
10
10
12
10

我的代码有什么问题?它需要我的代码中的种子值,对吗?您可以在 run code 查看结果

最佳答案

您需要为您的随机数生成器播种。

做这样的事情:

std::random_device rd;
std::default_random_engine generator;
generator.seed( rd() ); //Now this is seeded differently each time.
std::normal_distribution<double> distribution(10,1);

for (int n = 0; n < 12; ++n) {
{
printf("%d\n",roundnew(distribution(generator)));
}

std::random_device 应该生成不确定的数字,因此它应该适合您的播种目的。每个程序运行都应该为您的 RNG 创建一个不同的种子。请参阅:http://en.cppreference.com/w/cpp/numeric/random/random_device(正如 R. Martinho Fernandes 指出的,在这方面缺少一些实现,所以如果您正在做一些重要的事情,请检查实现细节。)

有关 C++ 随机数生成的更多详细信息,请参阅:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3551.pdf

关于c++ - 无法使用种子生成高斯分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24145314/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com