偽隨機和均勻隨機批量
偽隨機分佈
根據 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]
。