Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Применение ГПСЧ Isaac.pas / 25 сообщений из 27, страница 1 из 2
30.11.2011, 10:29:20
    #37551397
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Доброго времени суток уважаемые форумчане.
Вот и у меня назрела необходимость обратиться к Вам.
По ссылке здесь описаны ГПСЧ
http://www.sql.ru/forum/actualthread.aspx?tid=887642&pg=1

Подскажите кодом как применить для выдачи случайного целого из диапазона,
как пример, [1..100]
Isaac.pas (ну или RandomGenerator.pas)
...
Рейтинг: 0 / 0
30.11.2011, 10:59:00
    #37551468
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
RandomRange function
...
Рейтинг: 0 / 0
30.11.2011, 11:17:22
    #37551514
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Таки период 2^32 и для приведенных файлов от 2^40 до 2^8000+ есть разница. Хотелось бы использовать. Но вот как их использовать?
Мудрил мудрил, ну ничего не намудрил:).
...
Рейтинг: 0 / 0
30.11.2011, 11:24:41
    #37551545
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Есть еще MT19937 с периодом 2^19000+ но пока разбираюсь
...
Рейтинг: 0 / 0
30.11.2011, 12:29:25
    #37551707
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
barleksЕсть еще MT19937 с периодом 2^19000+ но пока разбираюсь

А для чего тебе такие строгости при генерации чисел в диапазоне 1..100 ?
...
Рейтинг: 0 / 0
30.11.2011, 14:07:23
    #37552006
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Гарантировано, что будут повторы уже при 101
И для стандартного рандом в справуке не указан период, он очень большой.
...
Рейтинг: 0 / 0
30.11.2011, 14:34:02
    #37552084
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Anatoly PodgoretskyИ для стандартного рандом в справуке не указан период, он очень большой. Там обычный конгруэнтный линейный генератор, период <= 2^32.
...
Рейтинг: 0 / 0
30.11.2011, 14:36:04
    #37552089
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
defecatorА для чего тебе такие строгости при генерации чисел в диапазоне 1..100 ?
Я знаю что дельфийского рандома вполне хватает, но ведь же хают его, периода в 2^32 им мало - типа не криптостойкий, подвержен взлому и т.п.....И вот значит если заявлю о более крутом ГПСЧ сразу солидности добавляется. Кстати Вы писали что давно уже не используете дельфийский ГПСЧ.
В моей проге ГПСЧ выдает последовательность чисел, которые использую потом как шум для разбавления кодировки исходного текста при его шифровании.
...
Рейтинг: 0 / 0
30.11.2011, 14:39:10
    #37552096
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
barleksВ моей проге ГПСЧ выдает последовательность чисел, которые использую потом как шум для разбавления кодировки исходного текста при его шифровании.

А разве для такой задачи мало 2^32 ?
...
Рейтинг: 0 / 0
30.11.2011, 14:39:26
    #37552097
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Anatoly PodgoretskyГарантировано, что будут повторы уже при 101
И для стандартного рандом в справуке не указан период, он очень большой.
Так вроде разговор не о том что после 100 выдать неповторяемую цифру невозможно, а о том что последовательность цифр из диапазона будет неповторяться еще тыщу лет:) А период в хорошей справке всегда должен быть указан для таких вещей:)
...
Рейтинг: 0 / 0
30.11.2011, 14:41:51
    #37552108
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
defecatorА разве для такой задачи мало 2^32 ?
Хочется добавить солидности в глаза Заказчику по выполненной работе.:)
Помогите если можете.
...
Рейтинг: 0 / 0
30.11.2011, 15:24:23
    #37552234
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
barleksAnatoly PodgoretskyГарантировано, что будут повторы уже при 101
И для стандартного рандом в справуке не указан период, он очень большой.
Так вроде разговор не о том что после 100 выдать неповторяемую цифру невозможно, а о том что последовательность цифр из диапазона будет неповторяться еще тыщу лет:) А период в хорошей справке всегда должен быть указан для таких вещей:)
136 лет, если генерировать по штуке в секунду
...
Рейтинг: 0 / 0
30.11.2011, 15:30:21
    #37552247
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
barleks,
А в чем проблема?
Если есть хороший ГСЧ в дипазоне [0,1] просто растягивай его на свой.
...
Рейтинг: 0 / 0
30.11.2011, 15:54:05
    #37552312
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Хорошая идея, надо проработать. Чет не подумал.
Спасибо.
...
Рейтинг: 0 / 0
30.11.2011, 16:28:37
    #37552422
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Не за что. Единственная проблема, которая может возникнуть - округление половинных чисел. Возможно придется управляющее слово вручную задавать.
...
Рейтинг: 0 / 0
30.11.2011, 16:51:21
    #37552478
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Превратить в диапазон, дело нескольких минут, это всего лишь умножение и сложение.
...
Рейтинг: 0 / 0
30.11.2011, 18:00:51
    #37552675
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Anatoly PodgoretskyПревратить в диапазон, дело нескольких минут, это всего лишь умножение и сложение. Если использовать ГСЧ для криптографии требуется точное соответствие, одинаково работающее на всех компах. При округлении могут быть проблемы.
...
Рейтинг: 0 / 0
30.11.2011, 18:01:03
    #37552676
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Все, проблему решил, но не с Isaac, а с MT19937, а поскольку это получше, то меня устраивает:).
Вот код:

uses MT19937;

procedure TForm1.btn1Click(Sender: TObject);
var
i: integer;
begin
randomize_MT19937;
Mmo1.Clear;
for i:=1 to 40 do Mmo1.Lines.Add(IntTostr(randInt_MT19937(100)));
end;

Файл по МТ прилагаю (по крайней мере попытаюсь:), если что ищите в нете
...
Рейтинг: 0 / 0
01.12.2011, 09:35:29
    #37553345
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
И вот у меня по этой теме след вопрос назрел. Может кто просветит.
В разных источниках рекомендуют в create применить randomize, а потом в теле проги применять рандом.
randomize задает случайное смещение по периоду - точку отсчета так сказать, и потом уже рандом от этой точки начинает брать из последовательности значения.
Но ведь если связку randomize и random применять вместе в теле проги то тогда по идее последовательности не будет, а значения будут браться в хаотичном порядке из всего периода.
Вот и вопрос, почему учебники советуют в create применить randomize, а не в связке в проге? Они наверное что-то знают?
...
Рейтинг: 0 / 0
01.12.2011, 10:25:52
    #37553428
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
barleksИ вот у меня по этой теме след вопрос назрел. Может кто просветит.
В разных источниках рекомендуют в create применить randomize, а потом в теле проги применять рандом.
randomize задает случайное смещение по периоду - точку отсчета так сказать, и потом уже рандом от этой точки начинает брать из последовательности значения.
Но ведь если связку randomize и random применять вместе в теле проги то тогда по идее последовательности не будет, а значения будут браться в хаотичном порядке из всего периода.
Вот и вопрос, почему учебники советуют в create применить randomize, а не в связке в проге? Они наверное что-то знают?

Ramdomize - это инициализация генератора псп.
Делается один раз. Можно при старте программы.
ВСЁ.
...
Рейтинг: 0 / 0
01.12.2011, 11:01:43
    #37553517
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Ну вот читаю справочник: "Для того чтобы последовательность ПСЧ начиналась с разных значений при каждом запуске проги используйте процедуру randomize" - это понятно. "randomize устанавливает randseed (начальное значение ГПСЧ) привязываясь ко времени" - тож понятно.

Не понятно вот это: "Не вызывайте randomize более одного раза в программе. Это разрушает случайность последовательности ПСЧ"

Почему она разрушается? И еще можно ли применить применить рекурсию, т.е. для установки randseed использовать random?

п.с. книга "Справочник Delphi" издательство Орейли, "рысь на обложке" - это не реклама.
п.с. Я наверное тупые вопросы поднимаю.
...
Рейтинг: 0 / 0
01.12.2011, 11:07:00
    #37553532
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
barleksИ еще можно ли применить применить рекурсию, т.е. для установки randseed использовать random?

В любой рекурсии главное - это условие выхода из неё.
Какое условие выхода будет в твоей рекурсии ?
...
Рейтинг: 0 / 0
01.12.2011, 11:13:37
    #37553543
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
barleksНе понятно вот это: "Не вызывайте randomize более одного раза в программе. Это разрушает случайность последовательности ПСЧ"
Почему она разрушается? И еще можно ли применить применить рекурсию, т.е. для установки randseed использовать random?

Разрушается потому, что главное условие ГСЧ - генерировать равномерно распределенные случайные числа при смене randseed внутри последовательности равномерность нарушается.
Рекурсия в данном случае довольно глупое занятие, поскольку для конгруэнтного генератора random и randseed одно и то же.
...
Рейтинг: 0 / 0
01.12.2011, 11:25:06
    #37553573
barleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
Спасибо, растолковали.:)
...
Рейтинг: 0 / 0
01.12.2011, 11:59:08
    #37553674
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Применение ГПСЧ Isaac.pas
barleksИ вот у меня по этой теме след вопрос назрел. Может кто просветит.
В разных источниках рекомендуют в create применить randomize, а потом в теле проги применять рандом.
randomize задает случайное смещение по периоду - точку отсчета так сказать, и потом уже рандом от этой точки начинает брать из последовательности значения.
Но ведь если связку randomize и random применять вместе в теле проги то тогда по идее последовательности не будет, а значения будут браться в хаотичном порядке из всего периода.
Вот и вопрос, почему учебники советуют в create применить randomize, а не в связке в проге? Они наверное что-то знают?
Если делать последовательно применять вместе randomize и random, то будет одно и то же число, изредка меняющее. Ты еще предлолижи связку randomSeed и random, тогда даже редко меняться не будет.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Применение ГПСЧ Isaac.pas / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]