标题:
[数值计算]
批处理中如何获得概率相等的随机数?
[打印本页]
作者:
597476418
时间:
2011-8-27 13:02
标题:
批处理中如何获得概率相等的随机数?
假设我想获得0-37的随机数……按照正常的方法,应该写成这样:
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