zhxy9804 发表于 2017-12-28 21:10:56

批处理里面概率执行

批处理里面有两段
:1
:2
如何概率运行:1为十分之一,:2为十分之九?
谢谢!

slore 发表于 2017-12-28 21:28:52

%random%

zhxy9804 发表于 2017-12-28 21:11:40

就是想做一个概率跳转的命令,执行1的概率为十分之一,2的概率为十分之酒

Juno_Jr. 发表于 2017-12-28 22:10:50

本帖最后由 Juno_Jr. 于 2017-12-28 22:12 编辑

zhxy9804 发表于 2017-12-28 21:11
就是想做一个概率跳转的命令,执行1的概率为十分之一,2的概率为十分之酒

http://www.jb51.net/article/36489.htm

不知 发表于 2017-12-28 22:25:22


@echo off
set /a ret=%random%%%10
if /I 0%ret% EQU 0 call :1
if/I 0%ret% NEQ 0 call :2 根据上楼的用以上代码测试通过。

lbw2007 发表于 2017-12-28 22:48:30

不知 发表于 2017-12-28 22:25
根据上楼的用以上代码测试通过。

学习了

slore 发表于 2017-12-28 23:02:27

太长了
if %random:~1,1% EQU 1 ( echo 1 ) else (echo 9)

nttwqz 发表于 2017-12-28 23:25:00

此刻,十分凸显数学的重要性,哈哈~

谁能简单扼要的讲解下那个余数公式?对于不上学多年的我来说,现在只能死记硬背了。

nttwqz 发表于 2017-12-28 23:25:39

slore 发表于 2017-12-28 23:02
太长了

你这不成功,我双击了30多次,都是9……

slore 发表于 2017-12-28 23:29:30

nttwqz 发表于 2017-12-28 23:25
你这不成功,我双击了30多次,都是9……

扔5次硬币都是正面,能说扔硬币不是50%概率么?

随机一个数,末尾是1的概率是多少?

nttwqz 发表于 2017-12-28 23:52:12

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

nttwqz 发表于 2017-12-28 23:54:06

不知 发表于 2017-12-28 22:25
根据上楼的用以上代码测试通过。

前两次手动打开二十多次,都成立,后来不成立了,用命令测试也一样,看来这个也只能“随机”了

slore 发表于 2017-12-29 00:08:44

本帖最后由 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)

slore 发表于 2017-12-29 00:22:15

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来说完全可以忽略。
另外,系统的随机一般是按时间种子计算,你可以控制调用间隔,结果会变化,但是你执行更多次(千,万级),次数越多越接近。

反正要的是个“随机”,要是在这个上面钻牛角尖的话,我也无话可说。

nttwqz 发表于 2017-12-29 00:45:00

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!

slore 发表于 2017-12-29 00:57:55

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=?


nttwqz 发表于 2017-12-29 01:00:26

slore 发表于 2017-12-29 00:57
我是想取最后一位的,又想了想随便一个数就取开头也一样吧。就随意写了1,1。
就是个1行文的思路,就和我 ...

都是夜猫子……

nttwqz 发表于 2017-12-29 19:36:24

我也弄个不同思路的,同样不是绝对的十分之一

if %time:~-2% geq 10 (echo %%90) else echo %%10

quya 发表于 2017-12-29 21:23:31

本帖最后由 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%都是伪随机。

zhxy9804 发表于 2017-12-31 21:31:06

感谢各位的回答!受教了

icevan 发表于 2018-1-11 22:46:00

个人觉得概率上的东西来说样本都该无穷大才能说明。

你要的十分之一其实是10次里必须要出现一次。

而 实际上的概率是说每一次判断都有十分之一 的机会出现,有点拗口。
楼上有个丢硬币的例子就是,每一次丢出现正面个概率都是50%,但 这个次数的样本 无穷 大才行,
页: [1]
查看完整版本: 批处理里面概率执行