国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

生成隨機均衡整數

hidogs / 923人閱讀

摘要:使用來生成隨機數在日常操作中是普遍并且是簡單的。如下上述代碼的作用是生成的隨機數。但是,如果把隨機數改成隨機整數。

使用 Math.random 來生成隨機數在日常操作中是普遍并且是簡單的。如下:

let rnd = Math.random() * 10; 

上述代碼的作用是生成 0~10 的隨機數。

那么,這些隨機數是出現的概率是均衡的嗎?
筆者沒辦法直接回答這個問題。因為生成的隨機數個數理論上是一個無窮大的數集,不過,可以按數值大小范圍來估算數值的分布是否平均:

let bucket = new Array(10).fill(0); 
let res = new Array(500000); 
// 做50萬次隨機數
for(let i = 0; i < 500000; ++i) {
    res[i] = Math.random() * 10; 
    // 數值大小規類
    let num = res[i]; 
    for(let i = 0; i < 10; ++i) {
        if(num >= i * .1 && num < (i + 1) * .1) {
            ++bucket[i]; 
        }
    }
}

bucket.forEach(
    (count, index) => {
        console.log(index * .1 + "~" + (index + 1) * .1 + "的概率:" + count / 500000)
    }
)

以下是一次輸出結果:

0~0.1的概率:0.010244

0.1~0.2的概率:0.009868

0.2~0.3的概率:0.009744

0.3~0.4的概率:0.010024

0.4~0.5的概率:0.009818

0.5~0.6的概率:0.009814

0.6~0.7的概率:0.010048

0.7~0.8的概率:0.009834

0.8~0.9的概率:0.010154

0.9~1的概率:0.009988

結果顯示 Math.random() * 10 生成的數值分布是比較均衡的。

但是,如果把「隨機數」改成「隨機整數」。代碼改成:

let rnd = Math.round(Math.random() * 10); 

上面代碼是生成 0~10 的隨機整數。

那么,這些隨機整數是出現的概率是均衡的嗎?

筆者直觀上覺得是隨機的,但是實際情況并不是!測試代碼如下:

let res = new Array(11).fill(0); 
// 做一萬次隨機數
for(let i = 0; i < 500000; ++i) {
    ++res[Math.round(Math.random() * 10)]; 
}

res.forEach((count, index) => console.log(index + "的概率:" + count / 500000))

以下是一次結果:

0的概率:0.050028

1的概率:0.09957

2的概率:0.100616

3的概率:0.099684

4的概率:0.100672

5的概率:0.099588

6的概率:0.100446

7的概率:0.100276

8的概率:0.099664

9的概率:0.099628

10的概率:0.049828

不難發現,010 的概率是其它數值的一半左右,而其它數值的概率相差無幾。

Math.round 方法是造成「隨機整數」不均衡的原因

Math.round/Math.ceil/Math.floor 這三個函數作用是使一定范圍內的實數轉換成同一個整數。以 Math.round 為例如下:

從上圖可以直觀地看到,頭尾兩數(0&10)的取值范圍是其它整數的一半!

生成隨機均衡整數的一種方案
其實,只需要保證取值范圍的長度一致即可以實現隨機均衡整數。以下是筆者實現的一種方案:

let res = new Array(11).fill(0); 
// 做一萬次隨機數
for(let i = 0; i < 500000; ++i) {
    ++res[Math.floor(Math.random() * 11)]; 
}

res.forEach((count, index) => console.log(index + "的概率:" + count / 500000))

以下是一次輸出結果:

0的概率:0.090828

1的概率:0.090988

2的概率:0.09048

3的概率:0.08958

4的概率:0.091516

5的概率:0.090826

6的概率:0.09112

7的概率:0.091668

8的概率:0.090918

9的概率:0.090626

10的概率:0.09145

從結果上看分布是均衡的。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90781.html

相關文章

  • Dubbo 源碼分析 - 集群容錯之 LoadBalance

    摘要:即服務提供者目前正在處理的請求數一個請求對應一條連接最少,表明該服務提供者效率高,單位時間內可處理更多的請求。此時應優先將請求分配給該服務提供者。初始情況下,所有服務提供者活躍數均為。 1.簡介 LoadBalance 中文意思為負載均衡,它的職責是將網絡請求,或者其他形式的負載均攤到不同的機器上。避免集群中部分服務器壓力過大,而另一些服務器比較空閑的情況。通過負載均衡,可以讓每臺服務...

    ybak 評論0 收藏0
  • JS生成概率相等的隨機數(4種類型)

    摘要:生成隨機數的方案網上有很多,但是在驗證概率的時候卻發現不相同先把這種類型的隨機正整數生成方式貼出來。 生成隨機數的方案網上有很多,但是在驗證概率的時候卻發現不相同先把這4種類型的隨機正整數生成方式貼出來。 ①、// 生成 [n,m),包含n但不包含m的正整數: --?? parseInt(Math.random()*(m-n)+n) ②、// 生成(n,m],不包含n但包含m的正整數:...

    chadLi 評論0 收藏0
  • NPM酷庫:number-random,生成隨機數字

    摘要:庫就可以方便地生成指定范圍的隨機數字,并且支持指定生成整數或是小數。 NPM酷庫,每天兩分鐘,了解一個流行NPM庫。 昨天,我們了解到 string-random 庫可以用來快速生成指定格式的隨機字符串,今天我們繼續學習如何生成隨機的數字。 其實只需要 Math.random()就可以生成一個隨機數字,但是這個數字大小是0~1,如果我們需要生成一個指定范圍的隨機數字,那么就需要進一步的...

    wind5o 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<