伪随机和均匀随机批量

伪随机分布

根据 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]