Board logo

标题: [数值计算] 批处理将系统时间变作随机数 [打印本页]

作者: cjiabing    时间: 2010-11-24 11:37     标题: 批处理将系统时间变作随机数

我们常用的随机数由random产生。
%RANDOM%  ,系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
其实,要求没那么严格的,使用time也能提取 0 到 100 之间的随机数。(未验证或许是0-99)
1、使用毫秒生产随机数:  %time:~-2,2%
如果提取随机数的频率高,即两次以上提取随机数的时间间隔很短的话,比如少于0.1秒,就容易露出破绽。
2、使用秒和毫秒生成随机数:time:~-5,2%
不过这个数字比毫秒产生的数值要稳定,并且只能是 0 到 60之间的数字。随机数效果不是很明显。
3、可以使用秒与毫秒的组合:set tm=%time:~-5,2%%time:~-2,2%
或者稍加加工:set  /a   tm=%time:~-5,2%%time:~-2,2%
4、使用毫秒与random组合:set  tm=time:~-2,2%%random%
也可以加工:set  /a   tm=%time:~-2,2%+%random%
5、获取 0 到 9 之间的随机数:%time:~-1,1%
取得的结果少于10时,会在前面添加一个0,变成01、02、03……这个用来提取序号或许不错,不过难在时间一直都在变化之中,并不会在你使用的时候以01开始给你。
6、获取 0 到 10 之间的随机数:if  "%time:~-2,2%" lss "11"  set  tm=%time:~-2,2%    (未验证)
7、获取 0 到 18 之间的随机数:set /a  tm=%time:~-1,1%+%random:~-1,1%
8、获取 0 到 108 之间的随机数:set /a  tm=%time:~-2,2%+%random:~-1,1%
9、获取 0 到 198 之间的随机数:set /a  tm=%time:~-2,2%+%random:~-2,2%
使用%time%提取随机数可能会增加“0”和“00”出现的机率。使用%random%也可能会出现“0”,但不好使用%random:~-2,2%同时提取少于10和大于10的数字,而%time:~-2,2%可以解决这个问题。在这个基础上,还可以组成更好的组合以便同时获取更多的随机数。

[ 本帖最后由 cjiabing 于 2010-11-24 11:43 编辑 ]
作者: batman    时间: 2010-11-24 11:42

严格意义上来讲这不是随机数!呵呵。。。
作者: 523066680    时间: 2010-11-24 11:45

计算机的随机数都是伪随机数啦~
即使计算机在过程中没有直接引入时间,提取的数据也和时间的流逝有着直接的关系
作者: cjiabing    时间: 2010-11-24 11:45     标题: 回复 2楼 的帖子

呵呵,能用就行,因为毫秒产生变化快,从73到23的变化还是蛮快的。当然,要求严格肯定不行。
但它也有它的用处,比如最后一行提到的。
作者: 523066680    时间: 2010-11-24 11:46     标题: 回复 4楼 的帖子

以前我不知道random这个变量的时候
也是用时间来搞随机数的,是入门时候的事情了。
看算法如何吧,要弄个测试随机性质的东西测一下~
作者: cjiabing    时间: 2010-11-24 11:47

原帖由 523066680 于 2010-11-24 11:45 发表
计算机的随机数都是伪随机数啦~
即使计算机在过程中没有直接引入时间,提取的数据也和时间的流逝有着直接的关系

这么说random本身是个伪随机数,而time本身是个真随机数?哈哈
作者: cjiabing    时间: 2010-11-24 11:52     标题: 回复 5楼 的帖子

好像我是以前弄某些东西的时候,想到用time的。
用random提取1到100的随机数时要搞两个:
%random:~-1,1%
%random:~-2,2%
还得考虑搞一个随机提取它们当中一个来用的,很不爽,所以想到了time。
作者: vsbat    时间: 2010-11-24 12:33

set /a x=%random%%100+1


提取 1-100

[ 本帖最后由 vsbat 于 2010-11-24 12:35 编辑 ]
作者: 523066680    时间: 2010-11-24 14:28     标题: 回复 7楼 的帖子

Re:7楼
%random:~-2,2% 有风险,
因为随机数有时候只有一位数。
作者: wc726842270    时间: 2010-11-24 15:13

有些不懂。TIME能用做随机的也只有最后2位,但是如果在同一时间需要多个这样的数,它可能会按照时间来输出,也就是说是有顺序的(仅是个人理解),时间隔的大于1秒才比较好(但好细想还是1~2比较好)




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2