我想生成一个接近于零且具有一定范围的数字.例如,假设我要的号码落在下的时间为10 90%,但有一个小的机会,这将是15,20年甚至30数越高,接受它的机会越低.
我已经尝试用关键字"加权概率"寻找一些东西但找不到任何导致正确方向的东西.
更新:
我最终使用了Box-Muller变换(见接受的答案).这是我写的简单代码:
const E = 2.71828183;
function getRandomCurvedValue(temp.median, temp.density) {
return this.getCurvedValue(random(0, 1), temp.median, temp.density);
}
function getCurvedValue(temp.value, temp.median, temp.density) {
return temp.median + (temp.density * log(E, (temp.value / (1 - temp.value))));
}
Run Code Online (Sandbox Code Playgroud)
我认为你正在寻找一个正常的分布.
正态分布有两个可以更改的变量:均值和标准差.在你的情况下,平均值为0,并且适当选择标准偏差,使得90%的值低于10.(根据维基百科文章中的表格,我认为标准差为1.645是合适的.)
您可以使用Box-Muller变换作为从均匀分布的随机值生成正态分布随机值的简单方法.此外,您还需要使用结果的绝对值,因为您只需要[0,∞)范围内的值.