PDA

View Full Version : سوال در مورد سرعت اجرای random



h00manb
پنج شنبه 03 فروردین 1391, 09:51 صبح
سلام
در بین کدهای یک برنامه که در آن سرعت اجرا مهم بود به تکه کد زیر برخورد کردم
repeat
Rnd := Random(1000);
J := Lo(Rnd) and 7;
until (Lo(J) < 7));
به نظر شما این کد با کد زیر معادل است؟
J := Random(7)
اگر به جای کد اول از کد دوم استفاده می کرد سرعت برنامه کم می شد؟

BORHAN TEC
پنج شنبه 03 فروردین 1391, 11:33 صبح
من از لحاظ سرعت اجرا کدها را با روش زیر در سیستمم تست کردم.
کد اول:
procedure TForm1.Button1Click(Sender: TObject);
var
Rnd, J, I: Integer;
oldTime, NewTime: Cardinal;
begin
I := 0;
oldTime := GetTickCount;
while (I < 100000000) do
begin
repeat
Rnd := Random(1000);
J := Lo(Rnd) and 7;
until (Lo(J) < 7);
Inc(I);
end;
NewTime := GetTickCount;

ShowMessage(IntToStr(NewTime - oldTime));
end;
مدت زمان لازم برای اجرای کد اول:
1172 میلی ثانیه.

کد دوم:
procedure TForm1.Button1Click(Sender: TObject);
var
Rnd, J, I: Integer;
oldTime, NewTime: Cardinal;
begin
I := 0;
oldTime := GetTickCount;
while (I < 100000000) do
begin
J := Random(7);
Inc(I);
end;
NewTime := GetTickCount;

ShowMessage(IntToStr(NewTime - oldTime));
end;
مدت زمان لازم برای اجرای کد دوم:
407 میلی ثانیه.

و همانطور که مشاهده می شود کد زیر سرعت اجرای بالاتری دارد:
J := Random(7)


و بنابراین هیچ دلیلی ندارد که از کد اول استفاده کنید.