首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

两种生成随机数方法的异同

2012-03-23 
【求助】两种生成随机数方法的异同我们知道,通常情况下,rand()函数产生的随机数的范围是0到32767,现在要求把

【求助】两种生成随机数方法的异同
我们知道,通常情况下,rand()函数产生的随机数的范围是0到32767,现在要求把输出范围限定在1-50;看到过一下两种方法:

方法一:
1)得到一个在0到rand_max(32767)之间的随机数,把它除以rand_max,从而产生一个在0到1之间的校正值;
2)把校正值乘以所需要的范围值(例如49,即1-50),从而产生一个在0到49之间的值
3) 把该值和所要求的最小值相加,从而使该值最终落在正确的取值范围----1到50之间。

方法二:
1)rand()模50,得到一个0到49之间的值
2)然后将该值加1,得到1到50之间的值。

请问这两种方法有什么不同?

若需要的随机数的范围超过32767,用方法一应该可行吧?还有没有其他的方法?
望各位大神不吝赐教!

[解决办法]
第一种算法分布更均匀一些,也就是“更随机”一些。

第二种算法更快一些,但每个值的分布不如第一个均匀。0-17的数字出现几率要略高于其它的。
[解决办法]
如果是直接调用rand(),那就不用考虑这两种方法的区别了。如果对随机数的 周期 和 产生速率 有要求,

就不会直接调用rand()了。

要是自己做的话,现在最通用的方式就是 线性同余方法。如果有兴趣,可以翻下 《计算机程序设计艺术》(第二卷)。第一章就是讲随机数的

热点排行