获取一个以中心为焦点的随机数

23 浏览
0 Comments

获取一个以中心为焦点的随机数

有没有可能在1-100之间随机生成一个数字并使其主要保留在40-60的范围内? 我的意思是,它很少会超出这个范围,但我希望它主要在这个范围之内... 这是否可用 JavaScript / jQuery 实现?

目前我只是使用基本的Math.random() * 100 + 1

admin 更改状态以发布 2023年5月21日
0
0 Comments

你在这里得到了一些给出特定解决方案的好答案,让我为您描述一下通用解决方案。 问题是:

  • 我有一个在0到1之间分布相对均匀的随机数源。
  • 我希望生成一个遵循不同分布的随机数序列。

解决这个问题的通用解决方案是计算所需分布的分位函数,然后将分位函数应用于您的均匀源的输出。

分位函数是所需分布函数的积分的反函数。分布函数是函数,其中曲线下的面积等于随机选择的项目在该部分中的概率。

我在这里提供了一个如何做到这一点的示例:

http://ericlippert.com/2012/02/21/generating-random-non-uniform-data/

其中的代码是C#,但原则适用于任何语言;应该很容易将解决方案适应于JavaScript。

0
0 Comments

最简单的方法是在0-50之间生成两个随机数并将它们加起来。

这会导致分布倾向于50,就像掷两个骰子会导致结果偏向7一样。

事实上,通过使用更多的“骰子”(正如@Falco所建议的那样),您可以更接近于钟形曲线的近似:

function weightedRandom(max, numDice) {
    let num = 0;
    for (let i = 0; i < numDice; i++) {
        num += Math.random() * (max/numDice);
    }    
    return num;
}

Weighted random numbers

JSFiddle:http://jsfiddle.net/797qhcza/1/

0