gpt4 book ai didi

javascript - 生成正态分布的随机值时,定义范围的最有效方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:49:32 25 4
gpt4 key购买 nike

仅供引用:随机 == 伪随机

一个。生成均匀随机数时,我可以指定一个范围,即:

(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.我可以按如下方式计算这个范围:

  1. 假设我想要一个 300-500 的范围,那么 var total_range = 200;
  2. 我的平均值是 400,我的 +-range 是 total_range/2 (var r = 100)
  3. 因此 standard_deviation 将是 r/3 或在本例中为 33.333。

这似乎可行,但我不知道我在用数学做什么,所以我觉得自己像个白痴,这个解决方案感觉很笨拙而且不完全准确。

我的问题:有什么我正在跳舞的公式可以帮助我吗?我的要求如下:

  1. 必须能够准确定义数字范围。
  2. 必须尽可能高效地使用 JavaScript 完成。

我想也许我很接近,但还不完全。

最佳答案

将两个随机数相减不会得到正态分布,它会得到在零的两边线性下降的数字。请参阅此 fiddle 中的红色图表:

http://jsfiddle.net/Guffa/tvt5K/

要获得良好的正态分布近似值,请将六个随机数相加。请参阅 fiddle 中的绿色图表。

因此,要获得正态分布的随机数,请使用:

((Math.random() + Math.random() + Math.random() + Math.random() + Math.random() + Math.random()) - 3) / 3

此方法基于中心极限定理,此处概述为第二种方法:http://en.wikipedia.org/wiki/Normal_distribution#Generating_values_from_normal_distribution

关于javascript - 生成正态分布的随机值时,定义范围的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20160827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com