获取一个以中心为焦点的随机数
获取一个以中心为焦点的随机数
有没有可能在1-100之间随机生成一个数字并使其主要保留在40-60的范围内? 我的意思是,它很少会超出这个范围,但我希望它主要在这个范围之内... 这是否可用 JavaScript / jQuery 实现?
目前我只是使用基本的Math.random() * 100 + 1
。
admin 更改状态以发布 2023年5月21日
你在这里得到了一些给出特定解决方案的好答案,让我为您描述一下通用解决方案。 问题是:
- 我有一个在0到1之间分布相对均匀的随机数源。
- 我希望生成一个遵循不同分布的随机数序列。
解决这个问题的通用解决方案是计算所需分布的分位函数,然后将分位函数应用于您的均匀源的输出。
分位函数是所需分布函数的积分的反函数。分布函数是函数,其中曲线下的面积等于随机选择的项目在该部分中的概率。
我在这里提供了一个如何做到这一点的示例:
http://ericlippert.com/2012/02/21/generating-random-non-uniform-data/
其中的代码是C#,但原则适用于任何语言;应该很容易将解决方案适应于JavaScript。
最简单的方法是在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; }
JSFiddle:http://jsfiddle.net/797qhcza/1/