无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: zhxy9804

[求助] 批处理里面概率执行

[复制链接]
发表于 2017-12-28 21:10:56 | 显示全部楼层 |阅读模式
批处理里面有两段
:1
:2
如何概率运行:1为十分之一,:2为十分之九?
谢谢!
 楼主| 发表于 2017-12-28 21:11:40 | 显示全部楼层
就是想做一个概率跳转的命令,执行1的概率为十分之一,2的概率为十分之酒
回复

使用道具 举报

发表于 2017-12-28 21:28:52 | 显示全部楼层
  1. %random%
复制代码

评分

参与人数 1无忧币 +5 收起 理由
lbw2007 + 5 很给力!

查看全部评分

回复

使用道具 举报

发表于 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 | 显示全部楼层

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

点评

前两次手动打开二十多次,都成立,后来不成立了,用命令测试也一样,看来这个也只能“随机”了 [attachimg]364906[/attachimg]  详情 回复 发表于 2017-12-28 23:54
学习了  详情 回复 发表于 2017-12-28 22:48

评分

参与人数 1无忧币 +5 收起 理由
lbw2007 + 5 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2017-12-28 22:48:30 | 显示全部楼层
不知 发表于 2017-12-28 22:25
根据上楼的用以上代码测试通过。

学习了
回复

使用道具 举报

发表于 2017-12-28 23:02:27 | 显示全部楼层
太长了
  1. if %random:~1,1% EQU 1 ( echo 1 ) else (echo 9)
复制代码

点评

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

使用道具 举报

发表于 2017-12-28 23:25:00 | 显示全部楼层
此刻,十分凸显数学的重要性,哈哈~

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

回复

使用道具 举报

发表于 2017-12-28 23:25:39 | 显示全部楼层

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

点评

扔5次硬币都是正面,能说扔硬币不是50%概率么? 随机一个数,末尾是1的概率是多少?  详情 回复 发表于 2017-12-28 23:29
回复

使用道具 举报

发表于 2017-12-28 23:29:30 | 显示全部楼层
nttwqz 发表于 2017-12-28 23:25
你这不成功,我双击了30多次,都是9……


扔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 %ra  详情 回复 发表于 2017-12-28 23:52
回复

使用道具 举报

发表于 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
回复

使用道具 举报

发表于 2017-12-28 23:54:06 | 显示全部楼层
不知 发表于 2017-12-28 22:25
根据上楼的用以上代码测试通过。

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

GIF.gif
回复

使用道具 举报

发表于 2017-12-29 00:08:44 | 显示全部楼层
本帖最后由 slore 于 2017-12-29 00:23 编辑
  1. Microsoft Windows [版本 10.0.15063]
  2. (c) 2017 Microsoft Corporation。保留所有权利。

  3. C:\Users\MyPC>echo %random:~1,1%
  4. 1

  5. C:\Users\MyPC>echo %random:~1,1%
  6. 4

  7. C:\Users\MyPC>echo %random:~1,1%
  8. 2

  9. C:\Users\MyPC>echo %random:~1,1%
  10. 6

  11. C:\Users\MyPC>echo %random:~1,1%
  12. 5

  13. C:\Users\MyPC>echo %random:~1,1%
  14. 7

  15. C:\Users\MyPC>echo %random:~1,1%
  16. 2

  17. C:\Users\MyPC>echo %random:~1,1%
  18. 5

  19. C:\Users\MyPC>echo %random:~1,1%
  20. 7

  21. C:\Users\MyPC>echo %random:~1,1%
  22. 4

  23. C:\Users\MyPC>echo %random:~1,1%
  24. 1

  25. C:\Users\MyPC>
复制代码


这个结果,如果你想看的不是1,而是8或者9,是不是又说不通了?(没出现概率为0)
回复

使用道具 举报

发表于 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~65529  1/10
5位数   65530,65531,65532,65533,65534,65535,没有6,7,8,9所以,0~5比他们高1/65535的概率,但是按1/10来说完全可以忽略。
另外,系统的随机一般是按时间种子计算,你可以控制调用间隔,结果会变化,但是你执行更多次(千,万级),次数越多越接近。

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

点评

我数学学的不好,更没研究过概率,但从实际双击执行来看,不知的更加接近1/10。 我就觉得吧,你只取第二位数,怎么算出来0出现的概率是1/10呢?要是0-9,每个数字出现的概率是一样的,这容易理解。 话说,为何  详情 回复 发表于 2017-12-29 00:45
回复

使用道具 举报

发表于 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!

点评

我是想取最后一位的,又想了想随便一个数就取开头也一样吧。就随意写了1,1。 就是个1行文的思路,就和我第一个回复帖只写%random%,一样,让楼主自己去了解这个用法, 没有详细思考,那是使用的人该考虑和测试的事  详情 回复 发表于 2017-12-29 00:57
回复

使用道具 举报

发表于 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=?


点评

都是夜猫子……  详情 回复 发表于 2017-12-29 01:00
回复

使用道具 举报

发表于 2017-12-29 01:00:26 来自手机 | 显示全部楼层
slore 发表于 2017-12-29 00:57
我是想取最后一位的,又想了想随便一个数就取开头也一样吧。就随意写了1,1。
就是个1行文的思路,就和我 ...

都是夜猫子……
回复

使用道具 举报

发表于 2017-12-29 19:36:24 | 显示全部楼层
我也弄个不同思路的,同样不是绝对的十分之一

  1. if %time:~-2% geq 10 (echo %%90) else echo %%10
复制代码
回复

使用道具 举报

发表于 2017-12-29 21:23:31 | 显示全部楼层
本帖最后由 quya 于 2017-12-29 21:36 编辑

要完全的 1/10 和 9/10 概率, 应该是

  1. set /a x=10*%random%/32767 >nul& if %x% equ 0 (echo 1/10) else echo 9/10
复制代码


但是真如Slore所说,完全可以忽略精确性, 几乎没啥区别。我还是倾向于7楼的代码,简洁多了。

然后其实没啥用,%random%都是伪随机。
回复

使用道具 举报

 楼主| 发表于 2017-12-31 21:31:06 | 显示全部楼层
感谢各位的回答!受教了
回复

使用道具 举报

发表于 2018-1-11 22:46:00 | 显示全部楼层
个人觉得概率上的东西来说样本都该无穷大才能说明。

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

而 实际上的概率是说每一次判断都有十分之一 的机会出现,有点拗口。
楼上有个丢硬币的例子就是,每一次丢出现正面个概率都是50%,但 这个次数的样本 无穷 大才行,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 17:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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