Текущий архив: 2003.10.27;
Скачать: CL | DM;
Вниз
Люди, как получить более менее случайное число? Найти похожие ветки
← →
Knight (2003-10-07 06:54) [0]А то чё-то повторов больно много в программе...
------------------------
Randomize;
while i<Arr_Length do begin
Card:=((Random(Random(10001)+Random(Random(101))) mod 2)=0);
------------------------
← →
MBo (2003-10-07 07:13) [1]Randomize - один раз (при старте программы)
Random(Random(101)) - такая экзотика с квадратичным законом для чего???
← →
vidiv (2003-10-07 07:22) [2]Random(10001) mod 2 = 0
← →
Knight (2003-10-07 08:19) [3]>> MBo © (07.10.03 07:13) [1]
> Randomize - один раз (при старте программы)
Попробую...
> Random(Random(101)) - такая экзотика с квадратичным законом
> для чего???
Чтоб хитрее было :)
← →
MBo (2003-10-07 08:23) [4]>Чтоб хитрее было :)
Непонятно, к чему сводится эта хитрость и навороты при получении булевских значений
← →
MVova (2003-10-07 08:30) [5]Random(Random(101)) приводит к тому, что чем болише число тем с меньшей вероятностью оно будет появлятся.
← →
Knight (2003-10-07 08:32) [6]Последовательность больно часто повторяется... не спорю, может из-за Randomize, я почему-то думал, что он производит инициализацию перед использованием Random по системным часам, если логически, то получается, что чем чаще вызывается, лучше получается... а вот то что он вызывается один раз перед всеми вызовами Random, как-то недочитал... :)
← →
Fantasist (2003-10-07 08:56) [7]Приходит один программист к другому:
- Слушай, мне надо сгенерировать случайное число...
- Семнадцать!
← →
NailMan (2003-10-07 09:49) [8]Я в игрушке делаю такой рандомайзер:
Procedure MyRandomize;
begin
asm
push eax
push edx
RDTSC
mov dword ptr randseed[0],eax
pop edx
pop eax
end;
end;
Не привязывается к часам, а привязывается к процессору для инициализации RandSeed. Далее либо обычным Random либо RandG в зависимости что мне нужно сделать. Да! MyRandomize вызываю каждый раз когда нужно сделать какой-то рандом или группу рандомов.
Для булеанов сделал такой генератор:
Function RandomNormalBool:Boolean;
var z,p:integer;
begin
myrandomize;
p:=RandomRange(64,255);
Z:=Random(65536);
If Z in[64..p] then result:=false else result:=true;
end;
А для вектора такой:
Function RandomVector:TD3DVector;
var v:td3dvector;m:td3dmatrix;
Begin
MyRandomize;
v.x:=D3DXToradian(Randg(180,180));
v.y:=D3DXToradian(Randg(180,180));
v.z:=D3DXToradian(Randg(180,180));
D3DXMatrixRotationYawPitchRoll(m,v.x,v.y,v.z);
v:=d3dxvector3(0,1,0);
D3DXVec3TransformCoord(v,v,m);
result:=v;
end;
;-) Веселая функция, неправда ли?
Страницы: 1 вся ветка
Текущий архив: 2003.10.27;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.01 c