偽隨機和均勻隨機批量

偽隨機分佈

根據 Stack Overflow 的回答 ,使用者 CherryDT 指出了這段程式碼:

set /a num=%random% %% 100

沒有給出統一的分佈。

內部動態變數%random% 確實給出了均勻分佈,但上面的程式碼不是一個統一的隨機數。此程式碼生成 0 到 99 之間的隨機數,但結果不一致。自 32767 MOD 100 = 67 以來,0~67 將超過 68~99。

要使用上面的程式碼生成統一的分散式隨機數,則必須更改 100。這是一種獲取建立均勻分佈的數字的方法。

32767 mod (32767 / n)

其中 n 是一個整數,介於 0~32767 之間,結果可能是十進位制的,可能無法批量執行。

統一分配

set /a result=(%RANDOM%*100/32768)+1

該方法將生成均勻分佈。它避免使用%,它更像是批處理指令碼中的餘數,而不是模數。不使用%,結果將是均勻的。

或者,這是一種低效但統一的方法。

set /a test=%random%

if %test% geq [yourMinNumber] (
    if %test% leq [yourMaxNumber] (

        rem do something with your random number that is in the range.

   )
)

根據你自己的值改變 [yourMinNumber][yourMaxNumber]