Board logo

标题: [数值计算] 批处理中如何获得概率相等的随机数? [打印本页]

作者: 597476418    时间: 2011-8-27 13:02     标题: 批处理中如何获得概率相等的随机数?

假设我想获得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。

有没有一种方法,可以获得概率相等的随机数?
作者: lfoqtal    时间: 2011-8-27 13:34

不会差太多吧?你看起来是1/862的机率出错,其实应该这样算
32768个数里面只有最后12个数是会多出来的所以应该12/32768
所以偏差概貌率是 0.0003662109375 万分之三点六六
所以不大啦
作者: CrLf    时间: 2011-8-27 15:36

38 个 random 相加再去除…
作者: 597476418    时间: 2011-8-27 16:07

回复 3# CrLf


    我没看懂你说的是什么,能说的详细一点吗?
作者: CrLf    时间: 2011-8-27 17:13

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2