Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полностью случайные числа 
:(
    Опции темы
Dubinsky
Дата 5.8.2005, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 1.6.2005

Репутация: нет
Всего: нет



специально повторю хелп :

случайные числа должны как то инициализироватся , если нет он выдаёт всегда и везде ОДНУ И ТУ ЖЕ ПОСЛЕДОВАТЕЛЬНОСТЬ СЛУЧАЙНЫХ чисел ! это отладочный режим рандома ! чтобы в программе можно было следить за глюками , если они возникают при определённом случайном числе (ну например выход за пределы списка каким то случайным числом) то если диапазон случайных чисел большой , дождатся следующего глюка при следующем запуске будет трудно (да и глюк будет появлятся в разное время) , а так всё время одинаковый ряд , глюк будет возникать в одно и то же время в одних и тех же условиях.

во время отладки инициализация отрубается (ну там командой препроцессора) а в релизе врубается.

PM MAIL WWW   Вверх
p0s0l
Дата 6.8.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 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...


--------------------
С уважением, г-н Посол.
PM   Вверх
InfMag
Дата 15.8.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Да! Да! Народ, я написать забыл. Чтобы о Randomize(); и randomize(); не говорили они не помогают!
Если написать Randomize(); один раз, то числа будут выдаваться случайно, но проблема исходит от того, что обновление хэша времени происходит тока раз в секунду. Я сделал примерчик, тыкаю на кпопку... Вобщем интервал между обновления числа равен ЦЕЛОЙ СЕКУНДЕ!!! А что если операция вызывается перетасовкой через цикл? Юзать таймер на одну секунду и ждать пока програ проделает действия с этим Randomize();?! Просто смех!
Вот как написал я и у меня все идеально работает:
Код

// Объявляю в конструкторе связь со временем
__fastcall TTestReady::TTestReady(TComponent* Owner)
        : TForm(Owner)
{
        srand((unsigned)time(NULL));
}

// Функция случайных чисел
int rnd(int &From, int &To)
{
        return(To-rand()%((To-From)+1));
}

Вот так все работает у меня тик так. Один раз зделал и больше не насиловал Randomize();
А те люди, которые его так и юзали, наверно уже много глючных проектов наделали smile))
Добавлено @ 10:56
Сорри, у меня форма не стандартно называется... smile
Код

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        srand((unsigned)time(NULL));
}

PM   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.