![]() |
|
|
![]()
|
|
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
специально повторю хелп :
случайные числа должны как то инициализироватся , если нет он выдаёт всегда и везде ОДНУ И ТУ ЖЕ ПОСЛЕДОВАТЕЛЬНОСТЬ СЛУЧАЙНЫХ чисел ! это отладочный режим рандома ! чтобы в программе можно было следить за глюками , если они возникают при определённом случайном числе (ну например выход за пределы списка каким то случайным числом) то если диапазон случайных чисел большой , дождатся следующего глюка при следующем запуске будет трудно (да и глюк будет появлятся в разное время) , а так всё время одинаковый ряд , глюк будет возникать в одно и то же время в одних и тех же условиях. во время отладки инициализация отрубается (ну там командой препроцессора) а в релизе врубается. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Вызывать Randomize в цикле перед каждым Random-ом не нужно, т.к. это портит распределение случайной величины; не известно, какие свойства будут у такого распределения. Ну и во-вторых, не известно как сработает Randomize, т.е. каким способом он получает время ? Таймеры изменяют своё значение в дискретные моменты времени, и если период этот большой, то может получиться так, что последовательный вызов нескольких Randomize выдаст одни и то же значения, а значит, и Random тоже выдаст абсолютно одинаковые числа...
Например, в Delphi реализация Randomize выглядит следующим образом (в Builder скорее всего также): вызывается QueryPerformanceCounter, если результат нулевой, то вызывается GetTickCount. Как видно, есть вероятность того, что будет работать GetTickCount (правда не знаю, в каких случаях не сработает QueryPerformanceCounter), в этом случае мы получим огромное количество одинаковых идущих друг за другом чисел... Поэтому правильнее 1 раз вызвать Randomize, а потом просто вызывать Random... -------------------- С уважением, г-н Посол. |
|||
|
||||
| InfMag |
|
||||
|
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: 1 Всего: 4 |
Да! Да! Народ, я написать забыл. Чтобы о Randomize(); и randomize(); не говорили они не помогают!
Если написать Randomize(); один раз, то числа будут выдаваться случайно, но проблема исходит от того, что обновление хэша времени происходит тока раз в секунду. Я сделал примерчик, тыкаю на кпопку... Вобщем интервал между обновления числа равен ЦЕЛОЙ СЕКУНДЕ!!! А что если операция вызывается перетасовкой через цикл? Юзать таймер на одну секунду и ждать пока програ проделает действия с этим Randomize();?! Просто смех! Вот как написал я и у меня все идеально работает:
Вот так все работает у меня тик так. Один раз зделал и больше не насиловал Randomize(); А те люди, которые его так и юзали, наверно уже много глючных проектов наделали Добавлено @ 10:56 Сорри, у меня форма не стандартно называется...
|
||||
|
|||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |