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

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

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

А разве для такой задачи мало 2^32 ?
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37552097
barleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly PodgoretskyГарантировано, что будут повторы уже при 101
И для стандартного рандом в справуке не указан период, он очень большой.
Так вроде разговор не о том что после 100 выдать неповторяемую цифру невозможно, а о том что последовательность цифр из диапазона будет неповторяться еще тыщу лет:) А период в хорошей справке всегда должен быть указан для таких вещей:)
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37552108
barleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorА разве для такой задачи мало 2^32 ?
Хочется добавить солидности в глаза Заказчику по выполненной работе.:)
Помогите если можете.
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37552234
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barleksAnatoly PodgoretskyГарантировано, что будут повторы уже при 101
И для стандартного рандом в справуке не указан период, он очень большой.
Так вроде разговор не о том что после 100 выдать неповторяемую цифру невозможно, а о том что последовательность цифр из диапазона будет неповторяться еще тыщу лет:) А период в хорошей справке всегда должен быть указан для таких вещей:)
136 лет, если генерировать по штуке в секунду
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37552247
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barleks,
А в чем проблема?
Если есть хороший ГСЧ в дипазоне [0,1] просто растягивай его на свой.
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37552312
barleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошая идея, надо проработать. Чет не подумал.
Спасибо.
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37552422
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не за что. Единственная проблема, которая может возникнуть - округление половинных чисел. Возможно придется управляющее слово вручную задавать.
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37552478
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Превратить в диапазон, дело нескольких минут, это всего лишь умножение и сложение.
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37552675
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly PodgoretskyПревратить в диапазон, дело нескольких минут, это всего лишь умножение и сложение. Если использовать ГСЧ для криптографии требуется точное соответствие, одинаково работающее на всех компах. При округлении могут быть проблемы.
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37552676
barleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, проблему решил, но не с 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
Применение ГПСЧ Isaac.pas
    #37553345
barleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот у меня по этой теме след вопрос назрел. Может кто просветит.
В разных источниках рекомендуют в create применить randomize, а потом в теле проги применять рандом.
randomize задает случайное смещение по периоду - точку отсчета так сказать, и потом уже рандом от этой точки начинает брать из последовательности значения.
Но ведь если связку randomize и random применять вместе в теле проги то тогда по идее последовательности не будет, а значения будут браться в хаотичном порядке из всего периода.
Вот и вопрос, почему учебники советуют в create применить randomize, а не в связке в проге? Они наверное что-то знают?
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37553428
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
barleksИ вот у меня по этой теме след вопрос назрел. Может кто просветит.
В разных источниках рекомендуют в create применить randomize, а потом в теле проги применять рандом.
randomize задает случайное смещение по периоду - точку отсчета так сказать, и потом уже рандом от этой точки начинает брать из последовательности значения.
Но ведь если связку randomize и random применять вместе в теле проги то тогда по идее последовательности не будет, а значения будут браться в хаотичном порядке из всего периода.
Вот и вопрос, почему учебники советуют в create применить randomize, а не в связке в проге? Они наверное что-то знают?

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

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

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

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

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

Разрушается потому, что главное условие ГСЧ - генерировать равномерно распределенные случайные числа при смене randseed внутри последовательности равномерность нарушается.
Рекурсия в данном случае довольно глупое занятие, поскольку для конгруэнтного генератора random и randseed одно и то же.
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37553573
barleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, растолковали.:)
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37553674
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barleksИ вот у меня по этой теме след вопрос назрел. Может кто просветит.
В разных источниках рекомендуют в create применить randomize, а потом в теле проги применять рандом.
randomize задает случайное смещение по периоду - точку отсчета так сказать, и потом уже рандом от этой точки начинает брать из последовательности значения.
Но ведь если связку randomize и random применять вместе в теле проги то тогда по идее последовательности не будет, а значения будут браться в хаотичном порядке из всего периода.
Вот и вопрос, почему учебники советуют в create применить randomize, а не в связке в проге? Они наверное что-то знают?
Если делать последовательно применять вместе randomize и random, то будет одно и то же число, изредка меняющее. Ты еще предлолижи связку randomSeed и random, тогда даже редко меняться не будет.
...
Рейтинг: 0 / 0
Применение ГПСЧ Isaac.pas
    #37554286
barleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly PodgoretskyЕсли делать последовательно применять вместе randomize и random, то будет одно и то же число, изредка меняющее.
А вот и нет, из-за привязки randomize ко времени, такого не будет. Доказывается простым опытом на delphi. Я это знал, но спецом понабрасывал пару строк кода и проверил, только что.

Anatoly PodgoretskyТы еще предлолижи связку randomSeed и random, тогда даже редко меняться не будет.
Это не проверял, но опять врядли и опять же из-за привязки ко времени.

Суть уже раскрыли: хочешь равномерную последовательность ПСЧ - один раз в create вызови randomize,
хочешь неравномерную (читай чёрти какую) - используй связку.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Применение ГПСЧ Isaac.pas
    #39475143
CheatEngine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Isaac использовать так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 var
       i: integer;
       x: TIsaac;
   begin
        x:=isaac.TIsaac.Create;
        for i:=1 to 20 do Memo1.Lines.Add(IntToHex(x.val, 8));
        x.reSeed;  // reseed exactly as in Create()
        for i:=1 to 20 do Memo1.Lines.Add(IntToHex(x.val, 8));  // get the same values

   end;
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Применение ГПСЧ Isaac.pas
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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