在前端开发中,我们经常需要生成随机数,比如生成验证码、随机背景色等。但是,由于 Math.random() 方法生成的随机数是均匀分布的,它们往往不能满足我们的需求。本文将介绍如何得到一个集中在中心的随机数。
什么是集中在中心的随机数?
所谓集中在中心的随机数,就是指生成的随机数在中心附近出现的概率更高。这种分布方式被称为正态分布或高斯分布,它在统计学、物理学、金融学等领域有广泛的应用。
如何生成集中在中心的随机数?
为了生成集中在中心的随机数,我们可以使用 Box-Muller 转换算法。该算法基于极坐标系下的正态分布特性,通过两个均匀分布的随机数生成一个正态分布的随机数。
以下是 JavaScript 实现代码:
function normalRandom() { let u = 0, v = 0; while (u === 0) u = Math.random(); // 避免 U 取值为 0 while (v === 0) v = Math.random(); // 避免 V 取值为 0 let num = Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v); // 将均值设为 0,标准差设为 1 return num / 10 + 0.5; }
上述代码中,我们首先生成两个不为 0 的随机数 u 和 v,然后使用 Box-Muller 转换算法生成正态分布的随机数。最后,将得到的随机数乘以一个系数并加上偏移量,使其在 0 到 1 的范围内并集中在中心。
如何验证随机数是否符合要求?
为了验证生成的随机数是否符合要求,我们可以使用统计学中的假设检验方法。具体来说,我们可以绘制出样本的频率分布直方图,并使用正态分布拟合该直方图。如果拟合效果好,就说明生成的随机数符合正态分布。
以下是 JavaScript 实现代码:
-- -------------------- ---- ------- -------- -------------------- - --- ---- - --- --- ---- - - -- - - ------ ---- - -------------------------- - ----- ------- - - ------- - - ----- ------------ ----- ----- --------- - ------- ----- ---------- - ------ ------------- -- ----- - -- ----- ------- ------ ------ ------ ----- -- - ------ ------- ------ ----- --- -- ----- ------ ------ ------ ------ ----- -- - ------ ------- ------ ----- -- - -- ---------- - ------ --------- -- --------- - ---------- - ------ --------- - - - -- -------- --- ------ - ----- -------- ----- -------- ------------ --- ---- -- ------ - ----- ----------- ----- ------------ ----- -- - -- ----- ----- - --------------------------------------------------- ------------------------- -
上述代码中,我们首先生成 10000 个随机数,并绘制出它们的频率分布直方图。然后,我们使用正态分布拟合该直方图,并通过可视化展示验证结果
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/8784