仅供参考:随机==伪随机
A.当生成均匀随机数时,我可以指定一个范围,即:
(Math.random()-Math.random())*10+5
//generates numbers between -5 and 15
B. 生成一组具有高斯式正态随机性版本的随机值:
//pass in the mean and standard deviation
function randomNorm(mean, stdev) {
return Math.round((Math.random()*2-1)+(Math.random()*2-1)+(Math.random()*2-1))*stdev+mean);
}
//using the following values:
{
mean:400,
standard_deviation:1
//results in a range of 397-403, or +-range of 3
},
{
mean:400,
standard_deviation:10
//results in a range of 372-429, or +-range of 30
},
{
mean:400,
standard_deviation:25
//results in a range of 326-471, or +-range of 75
}
每个都给我一个大约 standard_deviation*(+-3) 的范围(假设我让程序运行更长时间)。
C. 我可以如下计算这个范围:
- 假设我想要的范围是 300-500,所以 var total_range = 200;
- 我的平均值是 400,我的+范围是total_range/2 (var r = 100)
- 因此 standard_deviation 将为 r/3 或在本例中为 33.333。
这似乎有效,但我不知道我在用数学做什么,所以我觉得自己像个白痴,这个解决方案感觉很笨拙并且不完全准确。
我的问题:
我正在跳舞的一些公式可以帮助我吗?我的要求如下:
- 必须能够准确地定义数字范围。
- 必须用 JavaScript 完成,尽可能高效。
我想也许我已经很接近了,但还没有完全实现。
减去两个随机数不会得到正态分布,它会得到在零两侧线性下降的数字。请参阅此小提琴中的红色图:
http://jsfiddle.net/Guffa/tvt5K/ http://jsfiddle.net/Guffa/tvt5K/
为了获得正态分布的良好近似值,请将六个随机数相加。请参阅小提琴中的绿色图表。
因此,要获得正态分布的随机数,请使用:
((Math.random() + Math.random() + Math.random() + Math.random() + Math.random() + Math.random()) - 3) / 3
该方法基于中心极限定理,此处概述为第二种方法:http://en.wikipedia.org/wiki/Normal_distribution#Generate_values_from_normal_distribution http://en.wikipedia.org/wiki/Normal_distribution#Generating_values_from_normal_distribution
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)