标题: [数值计算] random命令在cmd窗口和批处理中变化不同 [打印本页]
作者: tireless 时间: 2009-2-15 18:42 标题: random命令在cmd窗口和批处理中变化不同
运行以下批处理多次:复制代码
得到的 1.txt:
20685
20692
20695
20702
20705
20708
%random% 值变化得好连续。。
在命令提示符窗口中,%random% 值会很随机:
C:\>echo %random%
19114
C:\>echo %random%
26744
C:\>echo %random%
15506
C:\>echo %random%
8354
C:\>
为什么会这样?
作者: wxcute 时间: 2009-2-15 18:56 标题: 这样就好些了
- @echo off
- :lp
- setlocal
- echo %random%
- endlocal
- pause>nul
- goto :lp
复制代码
作者: tireless 时间: 2009-2-15 19:05 标题: 回复 2楼 的帖子
不用 setlocal 和 endlocal 也可。
但是多次运行就会很连续。
作者: BBCC 时间: 2009-2-15 19:42
好像看过有人加一个%random%做label,可以减少一点连续性.
作者: lhjoanna 时间: 2009-2-15 19:54
我想这得从random机制想吧,一般来说都是一个函数用来生成随机数种子,然后另一个函数根据种子来产生随机数,安全的随机数产生机制,出现连续性的情况很小。tireless是怎么出现那么连续的随机数呢,我试验怎么没有?
作者: BBCC 时间: 2009-2-15 20:25
我曾经也试过...
作者: johnson3333 时间: 2009-6-28 01:11
- @echo off
- set /a var1=%random%
- echo %var1%>>a.txt
- pause
复制代码
结果:- 9779
- 9782
- 9782
- 9785
- 9785
- 9789
复制代码
为什么得到的是一个逐渐变大的数而不是随机出现的数呢?
tireless兄,我今天也是因为这个问题发问了
[ 本帖最后由 johnson3333 于 2009-6-28 01:13 编辑 ]
作者: zqz0012005 时间: 2009-6-28 01:24
作者: Batcher 时间: 2009-6-28 12:00
有条件玩玩Linux下的C编程的朋友,可以到头文件里面看看随即函数的种子是从哪里来的,呵呵。
虽然Windows源码咱们看不到,但原理应该类似。
作者: slore 时间: 2009-6-28 12:23
第一次random的种子是时间
cmd下面输入echo %random%
种子就变了。
你在批处理下面写:
@echo off
echo %random%>>1.txt
echo %random%>>2.txt
echo %random%>>3.txt
echo %random%>>4.txt
多次运行,只有1是连续的。
因为执行过%random%一遍后,种子就变了。
作者: slore 时间: 2009-6-28 12:26
所以要用的话,可以把1F的测试代码改成这样:
echo %random% 1>nul
>>1.txt echo %random%
作者: jackerloo2009 时间: 2009-7-2 08:37
我曾写测试ping的-n %time1%和-w %time1%参数的延时时间问题时也出现了这种情况
set /p time1=input:
这样每次手动输入同一时间10次时,每次测试ping得到的时间是不同的
但是如果 set time1=100
这样直接指定让代码自动运行10次,只有头一次的结果是不一样的,后面9次测出来的时间都是相同的
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |