Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#76: 2009-12-20 20:55:17 ЛС | профиль | цитата
На здоровье !
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#77: 2009-12-20 21:35:41 ЛС | профиль | цитата
andrestudio писал(а):
да ничем, только быстрее в 50 раз

Гы! Действительно быстрее. Сейчас замутим посмотреть, что можно выдавить из обоих схем

Леонид, а на какой длине последовательности проверялось
карма: 22

0
Ответов: 8926
Рейтинг: 823
#78: 2009-12-20 21:41:09 ЛС | профиль | цитата
nesco, 60000, думаю, что "всё в одном" непонятнее всегда, особенно при таких, как у нас коментариях
карма: 19

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#79: 2009-12-20 22:00:10 ЛС | профиль | цитата
Таак, проверил быстродействие на последних реализациях текущего кода и усовершенствованного кода от Леонида. Тут ошибочка вышла, действительно быстрее на пустом выводе

Вот такой код с массивом сравнивался


procedure THIRandom._work_doRandomWithoutRepeats;
var
i, j, rndidx, _max: integer;
IRnd: Array of integer;
begin
_max := Round(_prop_Max);
SetLength(IRnd, _max);
for i:= 0 to _max - 1 do
IRnd[i] := i;
for i:=0 to _max - 1 do
begin
j:= Round(Random *(_max - i) - 0.5 + i);
rndidx := IRnd[i];
IRnd[i] := IRnd[j];
FRnd := IRnd[j];
IRnd[j] := rndidx;
_hi_onEvent(_event_onRandom, Round(FRnd));
end;
SetLength(IRnd, 0);
end;
------------ Дoбавленo в 22.04:
Леонид писал(а):
думаю, что "всё в одном" непонятнее всегда

Ага, а засорять палитру компонентами из-за одного метода -- отличная идея

Кстати, Леонид, в твоем коде куча лишних телодвижений с округлением, которые там и в пень не упали. А у меня в коде посмотри, как реализуется динамический массив
------------ Дoбавленo в 22.32:
Внес исправления на SVN
карма: 22

0
Ответов: 8926
Рейтинг: 823
#80: 2009-12-20 23:10:02 ЛС | профиль | цитата
nesco, так я сразу и сказал, что не справился с real
Поэт, блин, "А намедни, был грешок, чуть не написал стишок"
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#81: 2009-12-20 23:24:58 ЛС | профиль | цитата
nesco писал(а):
Я повторил вашу схему на HiAsm'e, там в цикле у вас стоит Randomize
У меня Randomize в цикле не стоит.
А вообще-то глянь на такой Rnd (в IC)
code_16067.txt
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_16067.txt [1.1KB] [215]
Разработчик
Ответов: 26151
Рейтинг: 2127
#82: 2009-12-20 23:32:45 ЛС | профиль | цитата
Tad, кто-то не зря у нас Rundom переписал, не Galkov ли, случаем Давай не будем трогать испытанные методы
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#83: 2009-12-20 23:41:43 ЛС | профиль | цитата
nesco писал(а):
Давай не будем трогать испытанные методы
Давай не будем, но вообще-то "испытанные методы" именно те, что применены выше в IC
А у нас здорово смахивает на изобретение велосипеда.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#84: 2009-12-20 23:46:22 ЛС | профиль | цитата
Tad писал(а):
А у нас здорово смахивает на изобретение велосипеда

Я помню целые темы про это были, давно уже. Припоминается, что распределение у нашего метода лучше
карма: 22

0
Ответов: 8926
Рейтинг: 823
#85: 2009-12-21 10:15:53 ЛС | профиль | цитата
nesco, за динамические массивы спасибо! (Теперь-то уж я асс в паскале )
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#86: 2009-12-21 11:17:06 ЛС | профиль | цитата
nesco писал(а):
Внес исправления на SVN
В rnd _prop_Max задал =10.
Где 10 ?
code_16068.txt
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
файлы: 1code_16068.txt [332B] [214]
Голосовали:nesco
Разработчик
Ответов: 26151
Рейтинг: 2127
#87: 2009-12-21 11:39:11 ЛС | профиль | цитата
Tad писал(а):
Где 10 ?

Исправил. Я там еще один баг обнаружил с минимальным числом
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#88: 2009-12-21 17:37:46 ЛС | профиль | цитата
nesco писал(а):
Кстати, Леонид, в твоем коде куча лишних телодвижений
А я бы добавил одно телодвижение if i<>j

  for i := _min to _max - 1 do
begin
j := Round(Random *(_max - i) - 0.5 + i);
FRnd := IRnd[j];
if i<>j then
begin
rndidx := IRnd[i];
IRnd[i] := IRnd[j];
IRnd[j] := rndidx;
end;
_hi_onEvent(_event_onRandom, integer(Round(FRnd)));
end;

------------ Дoбавленo в 17.45:
nesco , а что делает * в Random *(_max - i)
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#89: 2009-12-21 18:05:36 ЛС | профиль | цитата
Tad писал(а):
а что делает * в Random *(_max - i)

Леонида спроси
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#90: 2009-12-21 18:19:04 ЛС | профиль | цитата
Леонид, спрашиваю
nesco, а если я задам min=800000, max=800050 - это какой же длинны будет массив если SetLength(IRnd, _max);
что то не так...
------------ Дoбавленo в 18.27:
Всежтаки нужно наверное
SetLength(IRnd, _max-_min)
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)