[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 批处理中如何获得概率相等的随机数?

假设我想获得0-37的随机数……按照正常的方法,应该写成这样:
  1. set /a num=%random% %%38
复制代码
但是,这样会出现一个问题:
如果%random%等于0-37,除以38后取余数,得到的是0-37
如果%random%等于38-75,除以38后取余数,得到的是0-37
……
如果%random%等于32718-32755,除以38后取余数,得到的是0-37
如果%random%等于32756-32767,问题就来了,它得到的余数是0-11

假设%random%生成0-32767的概率都是1/32768,那么,上面的代码得到0-11的概率为862/32768,生成12-38的概率为861/32768,相差了1/32768。

有没有一种方法,可以获得概率相等的随机数?

不会差太多吧?你看起来是1/862的机率出错,其实应该这样算
32768个数里面只有最后12个数是会多出来的所以应该12/32768
所以偏差概貌率是 0.0003662109375 万分之三点六六
所以不大啦
通用简洁实用就是批处理精神

TOP

38 个 random 相加再去除…

TOP

回复 3# CrLf


    我没看懂你说的是什么,能说的详细一点吗?

TOP

for /l %%a in (1 1 19) do set /a n+=!random!
set /a n%%=38

TOP

返回列表