CoffeeScript 生成可预测的随机数


当前第2页 返回上一页

但是,对于这个随机数发生器只有简单的解释。这是一个线性同余伪随机数发生器,其运行源于一条数学公式Ij+1 = (aIj+c) % m,其中a是乘数,c是加法偏移量,m 是模数。每次请求随机数时就会执行很大的乘法和加法运算——这里的“很大”与密钥空间有关——得到的结果将以模数的形式被返回密钥空间。

这个发生器的周期为232。虽然它绝对不能以加密为目的,但是对于最简单的随机性要求来说,它是相当足够的。randn()在循环之前将遍历整个密钥空间,下一个数由上一个来确定。

如果你想修补这个发生器,强烈建议你去阅读Knuth的The Art of Computer Programming中的第3章。随机数生成是件很容易弄糟的事情,然而Knuth会解释如何区分好的和坏的随机数生成。

不要把发生器的输出结果变成模数。如果你需要一个整数的范围,应使用分割的方法。线性同余发生器的低位是不具有随机性的。特别的是,它总是从偶数种子产生奇数,反之亦然。所以如果你需要一个随机的0或者1,不要使用:

# NOT random! Do not do this!
r.randn() % 2

因为你肯定得不到随机数字。反而,你应该使用r.rand(2)。


标签:CoffeeScript

返回前面的内容

相关阅读 >>

CoffeeScript 计算复活节的日期

CoffeeScript 去抖动函数

CoffeeScript 列表推导

CoffeeScript 对象数组

CoffeeScript 类方法和实例方法

CoffeeScript 转换弧度和度

CoffeeScript 扩展内置对象

CoffeeScript 回调绑定

CoffeeScript 重复字符串

CoffeeScript 由数组创建一个对象词典

更多相关阅读请进入《CoffeeScript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...