![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Добрый всем день. У меня появилась проблемма с гсч в делфи. Дело в том, что когда гсч генерирует мало цифр, всё вроде бы нормально, но когда нужно очень много цифр, то начинаются повторения. Я хочу спросить, можно ли как то усовершенствовать гсч, или может есть какая-то функция в делфи, которая работает без повторений?
|
|||
|
||||
| AndreyIQ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 5.2.2007 Репутация: 1 Всего: 8 |
Randomize перед Random вызываете?
|
|||
|
||||
| valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Да, вызываю. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Ну, понятие случайности не исключает повторений.
Что выдаёт стандартный Random - зависит от процессора. Если родной рэндом не нравится, то можно использовать другой алгоритм. Вот коллекция генераторов случайных чисел. |
|||
|
||||
| valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Спасибо, сейчас попробую... А использовал ли их кто- нибудь в работе? Они лучше, чем стандартный гсч? ..... Просто не хочется повторять одно и тоже. |
|||
|
||||
| valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Скачал , начал разбираться и ничего не могу понять... Я так понял, что функции написаны в текстовом файле, но вставить хотя бы одну из них в делфи не получается, - выдаёт ошибки. Объясните, что нужно делать, пожалуйста.
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
В текстовом файле функции на фортране.
Для паскаля в pas файлах - просто подключи нужный файл к проекту и пользуйся. Пример:
|
|||
|
||||
| valerchi |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Спасибо, понял, файл подключил, начал пользоваться. Очень интересно, какой будет результат. |
||||
|
|||||
| valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Всё нормально, получилорсь. Использовал функцию "MRandSeed(GetTickCount)" как "Randomize", а функцию "MRandInt(0, 50)" как случайное число от 0 до 50. Гонял программу полтора суток. За это время ни одного повторения... Скорость генерации чисел, правда, уменьшилась где- то процентов на 30, зато качество увеличилось на 100%. Большое спасибо, ещё раз.
|
|||
|
||||
| Ne1tr1n0 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 1.3.2009 Репутация: нет Всего: 8 |
А я ещё когда-то когда карты писал в школе, сохранял сгенеренные числа в массиве, и при каждой новой генерации пробегался по нему и если был повтор заново генерил число. Затем снова пробегался по массиву и т.д.
|
|||
|
||||
| Gwire |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
1)
Следующее значение зависит не от процессора, а от алгоритма генерации псевдо-случайних чисел. Именно псевдо-случайних А также если в пременную RandSeed перед вызовом Random вставлать одно итоже число то результат Random-а будет одно итоже число.
Прислеживается зависимость. 2) Random с параметром имеет тип Integer. Параметр может быть DWord (тобишь больше 2147483647). Random будет возвращать числа со знаком переполнения ("-") Используя преобразование DWord(число) получаем диапазон от 0 до 4294967295 (32 бита). 3) Если 32 бита мало можно использовать Int64.
Покривает диаразон от -9223372036854775808 до 9223372036854775807 4) Если и 64 бита мало то используй 128 бит. Функция CreateGUID, но это уже структура (record) увы. Тут прийдется попарится над преобразованием =\ Рекомендую остановится на 64. Это сообщение отредактировал(а) Gwire - 6.10.2011, 16:31 |
||||
|
|||||
| valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
||||
|
||||
| valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
А как, конкретно Это сделать не подскажешь? Это сообщение отредактировал(а) valerchi - 6.10.2011, 20:30 |
|||
|
||||
| Gwire |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Функция Random64, приведенная выше в этой теме, возвращает значение Int64. Для её использования...
Если нужно из указанного диапазона:
|
||||||
|
|||||||
| valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Gwire, Благодарю.
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |