radomize;
a := random(3);
b := random(3);
看一下结果 a=b=1; a=b=1; a=b=2; a=b=0; 为啥都是一样的结果,怎么可以实现 a=1 b=2; a=2 b=1 ;a=0 b=2 这样的结果呢?
a := random(3);
b := random(3);
看一下结果 a=b=1; a=b=1; a=b=2; a=b=0; 为啥都是一样的结果,怎么可以实现 a=1 b=2; a=2 b=1 ;a=0 b=2 这样的结果呢?
调试欢乐多
a := random(3);
Randomize;
b := random(3);
begin
Randomize;
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
Memo1.Lines.Add( IntToStr(Random(3)));
end;输出结果都是随机的
a := random(3);
Randomize;
b := random(3);这样的代码反倒容易出现同样的数。
asm
XOR EBX, EBX
IMUL EDX,[EBX].RandSeed,08088405H
INC EDX
MOV [EBX].RandSeed,EDX <-重置随机数因子
MUL EDX
MOV EAX,EDX
POP EBX每次使用后,都重置了随机数因子了的.因此不需要每次使用Randomize,只需要初始化一次即可,楼主的重复只是巧合,0,1,2这3种情况,出现随机数相同的情况是比较容易的,
一般都是在程序开头写入RandomIze;
其它时间没管过.难道每次使用都要先Randomize;啊...
randomize是让这个序列的起点换一下而已(相当于一个环型整数序列,起点也就是4G个)一般调用random函数的次数不会超过几M,所以,只要第一次之前randomize一次就行了
第一次之前都没randomize,则得到的整数序列的起点始终是一样的,亦即整数序列本身都是一样的了