c – srand(time(NULL))生成类似的结果
发布时间:2020-12-16 06:45:43 所属栏目:百科 来源:网络整理
导读:参见英文答案 rand() function in C is not random even when seeded????????????????????????????????????2个 我不明白为什么srand()在运行之间生成如此相似的随机数! 我试图运行以下代码 srand ( time(NULL) );int x = rand();cout x endl; 然而,不是一个
参见英文答案 >
rand() function in C is not random even when seeded????????????????????????????????????2个
我不明白为什么srand()在运行之间生成如此相似的随机数! 我试图运行以下代码 srand ( time(NULL) ); int x = rand(); cout << x << endl; 然而,不是一个适当的随机数,我总是得到几乎相同的数字,随着时间的推移,这个数字正在缓慢增长.所以我得到的数字如:11669,11685,11701,11714,11731. 我究竟做错了什么? 我正在使用Visual Studio 2010 SP1. 好吧,srand()真的那么简单吗?我的意思是如何将其称为随机函数? srand(1) => rand() = 41 srand(2) => rand() = 45 srand(3) => rand() = 48 srand(4) => rand() = 51 .... 解决方法
首先,
srand() 不是随机函数;它设定了起点
一个伪随机序列.有点令人惊讶的是,你的 rand() 的实施似乎正在返回一个基于的值
以前的状态,而不是新计算的状态,所以第一个 调用srand()后的值很大程度上取决于传递给的值 srand()函数.如果你要写: srand( time( NULL ) ); rand(); std::cout << rand() << std::endl; ,我相信你会看到更多的不同. FWIW:我在Windows和Linux上都尝试了以下内容: int main() { srand( time( NULL ) ); int r1 = rand(); std::cout << r1 << ' ' << rand() << std::endl; return 0; } 我以一秒的间隔调用了10次,得到了: 16391 14979 16394 25727 16397 3708 16404 25205 16407 3185 16410 13933 16417 2662 16420 13411 16427 2139 在Windows下使用VC – 你会注意到它的非常低的方差 1256800221 286343522 955907524 101665620 1731118607 991002476 1428701871 807009391 44395298 1688573463 817243457 1506183315 507034261 1310184381 1278902902 54648487 2049484769 942368151 1749966544 1833343137 在Windows下使用g;在这种情况下,即使读取的第一个值也是如此 如果你需要一个好的随机生成器,你可能不得不使用一个来自Boost;标准没有说明应该是什么算法使用,实施的质量差异很大. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |