找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23540|回复: 4

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

[复制链接]
发表于 2011-8-27 13:02:29 | 显示全部楼层 |阅读模式
假设我想获得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。

有没有一种方法,可以获得概率相等的随机数?
发表于 2011-8-27 13:34:20 | 显示全部楼层
不会差太多吧?你看起来是1/862的机率出错,其实应该这样算
32768个数里面只有最后12个数是会多出来的所以应该12/32768
所以偏差概貌率是 0.0003662109375 万分之三点六六
所以不大啦
发表于 2011-8-27 15:36:52 | 显示全部楼层
38 个 random 相加再去除…
 楼主| 发表于 2011-8-27 16:07:56 | 显示全部楼层
回复 3# CrLf


    我没看懂你说的是什么,能说的详细一点吗?
发表于 2011-8-27 17:13:24 | 显示全部楼层
for /l %%a in (1 1 19) do set /a n+=!random!
set /a n%%=38
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 22:31 , Processed in 0.016630 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表