批处理里面概率执行
批处理里面有两段:1
:2
如何概率运行:1为十分之一,:2为十分之九?
谢谢! %random% 就是想做一个概率跳转的命令,执行1的概率为十分之一,2的概率为十分之酒 本帖最后由 Juno_Jr. 于 2017-12-28 22:12 编辑
zhxy9804 发表于 2017-12-28 21:11
就是想做一个概率跳转的命令,执行1的概率为十分之一,2的概率为十分之酒
http://www.jb51.net/article/36489.htm
@echo off
set /a ret=%random%%%10
if /I 0%ret% EQU 0 call :1
if/I 0%ret% NEQ 0 call :2 根据上楼的用以上代码测试通过。
不知 发表于 2017-12-28 22:25
根据上楼的用以上代码测试通过。
学习了 太长了
if %random:~1,1% EQU 1 ( echo 1 ) else (echo 9) 此刻,十分凸显数学的重要性,哈哈~
谁能简单扼要的讲解下那个余数公式?对于不上学多年的我来说,现在只能死记硬背了。
slore 发表于 2017-12-28 23:02
太长了
你这不成功,我双击了30多次,都是9…… nttwqz 发表于 2017-12-28 23:25
你这不成功,我双击了30多次,都是9……
扔5次硬币都是正面,能说扔硬币不是50%概率么?
随机一个数,末尾是1的概率是多少? slore 发表于 2017-12-28 23:29
扔5次硬币都是正面,能说扔硬币不是50%概率么?
随机一个数,末尾是1的概率是多少?
我双击了30多次,实际效果胜过所有道理!
手动输入你的代码也是这样。
C:\>echo %random:~1,1%
5
C:\>echo %random:~1,1%
5
C:\>echo %random:~1,1%
8
C:\>echo %random:~1,1%
8
C:\>echo %random:~1,1%
9
C:\>echo %random:~1,1%
2
C:\>echo %random:~1,1%
5
C:\>echo %random:~1,1%
5
C:\>echo %random:~1,1%
4
C:\>echo %random:~1,1%
3
C:\>echo %random:~1,1%
5
C:\>echo %random:~1,1%
9
C:\>echo %random:~1,1%
4
C:\>echo %random:~1,1%
0
C:\>echo %random:~1,1%
4
C:\>echo %random:~1,1%
9
C:\>echo %random:~1,1%
0
C:\>echo %random:~1,1%
9
C:\>echo %random:~1,1%
2
C:\>echo %random:~1,1%
7
C:\>echo %random:~1,1%
2
不知 发表于 2017-12-28 22:25
根据上楼的用以上代码测试通过。
前两次手动打开二十多次,都成立,后来不成立了,用命令测试也一样,看来这个也只能“随机”了
本帖最后由 slore 于 2017-12-29 00:23 编辑
Microsoft Windows [版本 10.0.15063]
(c) 2017 Microsoft Corporation。保留所有权利。
C:\Users\MyPC>echo %random:~1,1%
1
C:\Users\MyPC>echo %random:~1,1%
4
C:\Users\MyPC>echo %random:~1,1%
2
C:\Users\MyPC>echo %random:~1,1%
6
C:\Users\MyPC>echo %random:~1,1%
5
C:\Users\MyPC>echo %random:~1,1%
7
C:\Users\MyPC>echo %random:~1,1%
2
C:\Users\MyPC>echo %random:~1,1%
5
C:\Users\MyPC>echo %random:~1,1%
7
C:\Users\MyPC>echo %random:~1,1%
4
C:\Users\MyPC>echo %random:~1,1%
1
C:\Users\MyPC>
这个结果,如果你想看的不是1,而是8或者9,是不是又说不通了?(没出现概率为0) random得到的是0~65535
取第一位
0出现的概率为1/65535,其他数字是1/9,所以1:9的概率的话是不对的(1:8)。取-2,-1来去最后一位才对。
1位数 0~9 1/10
2位数 10~99 1/10
3位数100~999 1/10
4位数1000~9999 1/10
5位数10000~655291/10
5位数 65530,65531,65532,65533,65534,65535,没有6,7,8,9所以,0~5比他们高1/65535的概率,但是按1/10来说完全可以忽略。
另外,系统的随机一般是按时间种子计算,你可以控制调用间隔,结果会变化,但是你执行更多次(千,万级),次数越多越接近。
反正要的是个“随机”,要是在这个上面钻牛角尖的话,我也无话可说。
slore 发表于 2017-12-29 00:22
random得到的是0~65535
取第一位
0出现的概率为1/65535,其他数字是1/9,所以1:9的概率的话是不对的(1 ...
我数学学的不好,更没研究过概率,但从实际双击执行来看,不知的更加接近1/10。
我就觉得吧,你只取第二位数,怎么算出来0出现的概率是1/10呢?要是0-9,每个数字出现的概率是一样的,这容易理解。
话说,为何网上都说random是0-65535,可是Win8.1 set帮助里面明明写的是0-32767!
u
本帖最后由 slore 于 2017-12-29 09:12 编辑nttwqz 发表于 2017-12-29 00:45
我数学学的不好,更没研究过概率,但从实际双击执行来看,不知的更加接近1/10。
我就觉得吧,你只取第 ...
我是想取最后一位的,又想了想随便一个数就取开头也一样吧。就随意写了1,1。
就是个1行文的思路,就和我第一个回复帖只写%random%,一样,让楼主自己去了解这个用法,
没有详细思考,那是使用的人该考虑和测试的事情(我又没有这种需求)。
批处理的话,从0开始,所以结果是你说的第2位。
如果随机数是1,2,3呢?没有第二位,会报错的。取第二位是错误的。
版本不一样,系统改了吧(也许首位有溢出BUG修复掉了,另外WIN10也是32767),还是,求余吧。(按10求余,其实也是去最后一位(个位),不是绝对1/10)
32767*2=?
slore 发表于 2017-12-29 00:57
我是想取最后一位的,又想了想随便一个数就取开头也一样吧。就随意写了1,1。
就是个1行文的思路,就和我 ...
都是夜猫子…… 我也弄个不同思路的,同样不是绝对的十分之一
if %time:~-2% geq 10 (echo %%90) else echo %%10 本帖最后由 quya 于 2017-12-29 21:36 编辑
要完全的 1/10 和 9/10 概率, 应该是
set /a x=10*%random%/32767 >nul& if %x% equ 0 (echo 1/10) else echo 9/10
但是真如Slore所说,完全可以忽略精确性, 几乎没啥区别。我还是倾向于7楼的代码,简洁多了。
然后其实没啥用,%random%都是伪随机。 感谢各位的回答!受教了 个人觉得概率上的东西来说样本都该无穷大才能说明。
你要的十分之一其实是10次里必须要出现一次。
而 实际上的概率是说每一次判断都有十分之一 的机会出现,有点拗口。
楼上有个丢硬币的例子就是,每一次丢出现正面个概率都是50%,但 这个次数的样本 无穷 大才行,
页:
[1]