v8 中 Math.random() 的伪随机

项目游戏开发过程中,使用大量的 Math.random() 生成[0,1)数进行游戏过程中随机数,但往往很难做到随机。

之前的解决方法更多的是加入间隔数或者多次随机,但在越来越多的用户反馈总会有一方或某一位置的数据过好,我们终于正视了这个问题,程序是没有错误的,还是出现在v8的Math.random()的伪随机数产生。

var ALPHABET= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; 
random_base64 = function random_base64(length) {
    var str = "";
    for (var i = 0; i < length; ++i) {
        var rand = Math.floor(Math.random() * ALPHABET.length);
        str += ALPHABET.substring(rand, rand + 1);
    }
}
创建一个所有随机数的序列,通过V8引擎的Math.random()产生length的标识符字符串,计算下,标识符总共有2^132中可能性
但可能你会在不远的时间取到相同的标识符,之后在查阅了不少文章后,发现有学者说到:
v8 中 Math.random() 的伪随机_第1张图片

现在看来,有一个循环周期的因素,应该会导致重复标识符的时间提早出现,不过替换上去后有待测试和反馈。



你可能感兴趣的:(Random)