当前位置:嗨网首页>书籍在线阅读

13-伪随机数生成器

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

16.3.4 伪随机数生成器

伪随机数生成器是由Math.random提供的,它会生成一个大于等于0且小于1的伪随机数字。读者可能记得在代数中,数字的范围是用方括号(包含)和圆括号(不包含)表示的。在这种表示法下,Math.random返回一个在[0, 1)范围内的数字。

Math.random 并没有提供任何常用函数,可以生成其他范围内的伪随机数,表16-4展示了一些实现这个功能的常用公式。在这个表中,x和y表示实数,而m和n表示整数。

表16-4  生成伪随机数

| 范  围 | 例  子 | | :----- | :----- | :----- | :----- | | [0, 1) | Math.random() | | [x, y) | x + (y-x)Math.random() | | 在 [m, n)范围内的整数 | m + Math.floor((n-m)Math.random()) | | 在 [m, n] 范围内的整数 | m + Math.floor((n-m+1)*Math.random()) |

JavaScript的伪随机数经常被诟病的一点是:无法对它设置随机种子,但是它对有些涉及伪随机数的算法的测试又很重要。如果需要使用随机种子来产生伪随机数,可以看看David Bau的seedrandom.js包(https://github.com/davidbau/seedrandom)。

将伪随机数生成器(PRNGs)简单称作“随机数生成器”很常见(但这是不对的)。在大多数实际应用中,PRNGs生成的数字只是看似很随机,但实际上实现真正的随机数生成器,是非常困难的。