请问C++的rand随机数发生器产生的随机数到底是什么分布呢

来源:百度知道 编辑:UC知道 时间:2024/06/07 04:49:42
请问哪有这方面的介绍,或者请给我一个可以信服的回答,谢谢了

rand产生一个0到RAND_MAX之间的整数。但实际上是一个伪随机数,重复调用rand产生一系列看上去是随机的数值,但在每次执行程序的时候,这组树本身是课重复的。一旦程序进行测的调试后,就可以调整为在每一次执行时产生不同的随机序列。这个过程称为随机化。使用srand完成。srand取一个unsigned类型的整数参数并内嵌rand函数(即种子就可以在每次执行程序的时候产生不同的随机数系列)
就你所说,t 会是0-10之间的一个随机数
据我的观察,在每一次种入不同的数值时,产生的随机序列不同,但种入相同的随机序列时是相同的。这是,可以通过计算机时钟自动取得种子值 srand(time(0));

是随机分布的。不过其实它是按固定算法算出来的。。。也就是说每次产生前我们需要给它一个启始数(就是种子【srand就是定义种子的】),然后它就会会用这种子进行运算,产生随机数,而且下一次运算的启始就是上一次的运算的结果,这样就产生了一大串数。因为这函数的结果产生的数是均匀的。所以只要启始数也就是种子是个随机数就可以了。(例如时间)。因为时间是在不断变化的所以每次启始数都不一样,也就得到了不一样的随机数。但是如果种子是一样的话,就会得到上次一样的结果。所以归根结底是一种算法算出来的伪随机数,机器本身是没有不确定性,也就是无法产生真正意义上的随机数的

均匀分布 。 但是具体实现方法是各不相同的, 所以效果也会不完全一样, 尤其最后几位的随机性可能会很差

你看下算法书,里面有均匀分布随机函数的算法。通常srand会用设置一个新的种子计算随机数,但是测试表明分布不均匀。效果不是很好。