成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

生成隨機(jī)均衡整數(shù)

hidogs / 939人閱讀

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

使用 Math.random 來生成隨機(jī)數(shù)在日常操作中是普遍并且是簡(jiǎn)單的。如下:

let rnd = Math.random() * 10; 

上述代碼的作用是生成 0~10 的隨機(jī)數(shù)。

那么,這些隨機(jī)數(shù)是出現(xiàn)的概率是均衡的嗎?
筆者沒辦法直接回答這個(gè)問題。因?yàn)樯傻碾S機(jī)數(shù)個(gè)數(shù)理論上是一個(gè)無窮大的數(shù)集,不過,可以按數(shù)值大小范圍來估算數(shù)值的分布是否平均:

let bucket = new Array(10).fill(0); 
let res = new Array(500000); 
// 做50萬次隨機(jī)數(shù)
for(let i = 0; i < 500000; ++i) {
    res[i] = Math.random() * 10; 
    // 數(shù)值大小規(guī)類
    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)
    }
)

以下是一次輸出結(jié)果:

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

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

但是,如果把「隨機(jī)數(shù)」改成「隨機(jī)整數(shù)」。代碼改成:

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

上面代碼是生成 0~10 的隨機(jī)整數(shù)。

那么,這些隨機(jī)整數(shù)是出現(xiàn)的概率是均衡的嗎?

筆者直觀上覺得是隨機(jī)的,但是實(shí)際情況并不是!測(cè)試代碼如下:

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

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

以下是一次結(jié)果:

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

不難發(fā)現(xiàn),010 的概率是其它數(shù)值的一半左右,而其它數(shù)值的概率相差無幾。

Math.round 方法是造成「隨機(jī)整數(shù)」不均衡的原因

Math.round/Math.ceil/Math.floor 這三個(gè)函數(shù)作用是使一定范圍內(nèi)的實(shí)數(shù)轉(zhuǎn)換成同一個(gè)整數(shù)。以 Math.round 為例如下:

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

生成隨機(jī)均衡整數(shù)的一種方案
其實(shí),只需要保證取值范圍的長度一致即可以實(shí)現(xiàn)隨機(jī)均衡整數(shù)。以下是筆者實(shí)現(xiàn)的一種方案:

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

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

以下是一次輸出結(jié)果:

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

從結(jié)果上看分布是均衡的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90781.html

相關(guān)文章

  • Dubbo 源碼分析 - 集群容錯(cuò)之 LoadBalance

    摘要:即服務(wù)提供者目前正在處理的請(qǐng)求數(shù)一個(gè)請(qǐng)求對(duì)應(yīng)一條連接最少,表明該服務(wù)提供者效率高,單位時(shí)間內(nèi)可處理更多的請(qǐng)求。此時(shí)應(yīng)優(yōu)先將請(qǐng)求分配給該服務(wù)提供者。初始情況下,所有服務(wù)提供者活躍數(shù)均為。 1.簡(jiǎn)介 LoadBalance 中文意思為負(fù)載均衡,它的職責(zé)是將網(wǎng)絡(luò)請(qǐng)求,或者其他形式的負(fù)載均攤到不同的機(jī)器上。避免集群中部分服務(wù)器壓力過大,而另一些服務(wù)器比較空閑的情況。通過負(fù)載均衡,可以讓每臺(tái)服務(wù)...

    ybak 評(píng)論0 收藏0
  • JS生成概率相等的隨機(jī)數(shù)(4種類型)

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

    chadLi 評(píng)論0 收藏0
  • NPM酷庫:number-random,生成隨機(jī)數(shù)字

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

    wind5o 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<