rand()函数的随机性如何?

时间:2011-05-06 15:34:12

标签: random

更具体地说,我的问题是,如果无限时间,int(rand()*1000)最终会击中0到999之间的每个数字?那么10 ^ 4,10 ^ 5 ...我猜它一旦你在内存中达到大小就会保证中断,即如果rand()返回一个浮点数,也就是内存中的n位,你可以&# 39; t可能击中n个不同的整数,所以一旦你到rand()*(2^n+1),你就可以保证错过一些。

1 个答案:

答案 0 :(得分:0)

是的,如果它有无限的时间,它会给你的范围内的每个数字提供无限的时间;一旦达到种子值,序列重复。当然,正如你所提到的那样,你将限制rand()返回的值的精度,并最终达到一个突破点,它无法映射到足够大范围内的每个整数。但是如果你考虑一个具有无限精度和周期的理论计算机(你带来无穷大),那么你将在无限时间内命中你指定范围内的每个数字。

但是,rand()使用的LCG不能统一分配数字。也就是说,你会得到一些比其他人更高频率的数字(虽然无限时间你可以击中所有,因为无限就是那么酷)。如果您需要均匀分布,请使用Mersenne Twister算法。 Boost库中有一个随机生成器,它具有Mersenne Twister并且易于实现。