随机高斯分布

Math.random() 函数应该给出标准差接近 0 的随机数。当从卡片组中挑选或模拟骰子卷时,这就是我们想要的。

但在大多数情况下,这是不现实的。在现实世界中,随机性倾向于围绕共同的正常值聚集。如果在图表上绘制,则获得经典钟形曲线或高斯分布。

使用 Math.random() 函数执行此操作相对简单。

var randNum = (Math.random() + Math.random()) / 2; 
var randNum = (Math.random() + Math.random() + Math.random()) / 3; 
var randNum = (Math.random() + Math.random() + Math.random() + Math.random()) / 4; 

向最后添加随机值会增加随机数的方差。除以你添加的次数,将结果标准化为 0-1 的范围

添加多个 random 是混乱的,一个简单的功能将允许你选择所需的方差。

// v is the number of times random is summed and should be over >= 1
// return a random number between 0-1 exclusive
function randomG(v){ 
    var r = 0;
    for(var i = v; i > 0; i --){
        r += Math.random();
    }
    return r / v;
}

StackOverflow 文档

图像显示了 v 的不同值的随机值的分布。左上角是标准单 Math.random() 调用,右下角是 Math.random() 总和 8 次。这是使用 Chrome 的 5,000,000 个样本

这种方法在 v<5 最有效