|
|
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток уважаемые форумчане. Вот и у меня назрела необходимость обратиться к Вам. По ссылке здесь описаны ГПСЧ http://www.sql.ru/forum/actualthread.aspx?tid=887642&pg=1 Подскажите кодом как применить для выдачи случайного целого из диапазона, как пример, [1..100] Isaac.pas (ну или RandomGenerator.pas) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 10:29:20 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
RandomRange function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 10:59:00 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Таки период 2^32 и для приведенных файлов от 2^40 до 2^8000+ есть разница. Хотелось бы использовать. Но вот как их использовать? Мудрил мудрил, ну ничего не намудрил:). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 11:17:22 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Есть еще MT19937 с периодом 2^19000+ но пока разбираюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 11:24:41 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
barleksЕсть еще MT19937 с периодом 2^19000+ но пока разбираюсь А для чего тебе такие строгости при генерации чисел в диапазоне 1..100 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 12:29:25 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Гарантировано, что будут повторы уже при 101 И для стандартного рандом в справуке не указан период, он очень большой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 14:07:23 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Anatoly PodgoretskyИ для стандартного рандом в справуке не указан период, он очень большой. Там обычный конгруэнтный линейный генератор, период <= 2^32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 14:34:02 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
defecatorА для чего тебе такие строгости при генерации чисел в диапазоне 1..100 ? Я знаю что дельфийского рандома вполне хватает, но ведь же хают его, периода в 2^32 им мало - типа не криптостойкий, подвержен взлому и т.п.....И вот значит если заявлю о более крутом ГПСЧ сразу солидности добавляется. Кстати Вы писали что давно уже не используете дельфийский ГПСЧ. В моей проге ГПСЧ выдает последовательность чисел, которые использую потом как шум для разбавления кодировки исходного текста при его шифровании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 14:36:04 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
barleksВ моей проге ГПСЧ выдает последовательность чисел, которые использую потом как шум для разбавления кодировки исходного текста при его шифровании. А разве для такой задачи мало 2^32 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 14:39:10 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Anatoly PodgoretskyГарантировано, что будут повторы уже при 101 И для стандартного рандом в справуке не указан период, он очень большой. Так вроде разговор не о том что после 100 выдать неповторяемую цифру невозможно, а о том что последовательность цифр из диапазона будет неповторяться еще тыщу лет:) А период в хорошей справке всегда должен быть указан для таких вещей:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 14:39:26 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
defecatorА разве для такой задачи мало 2^32 ? Хочется добавить солидности в глаза Заказчику по выполненной работе.:) Помогите если можете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 14:41:51 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
barleksAnatoly PodgoretskyГарантировано, что будут повторы уже при 101 И для стандартного рандом в справуке не указан период, он очень большой. Так вроде разговор не о том что после 100 выдать неповторяемую цифру невозможно, а о том что последовательность цифр из диапазона будет неповторяться еще тыщу лет:) А период в хорошей справке всегда должен быть указан для таких вещей:) 136 лет, если генерировать по штуке в секунду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 15:24:23 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
barleks, А в чем проблема? Если есть хороший ГСЧ в дипазоне [0,1] просто растягивай его на свой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 15:30:21 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Хорошая идея, надо проработать. Чет не подумал. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 15:54:05 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Не за что. Единственная проблема, которая может возникнуть - округление половинных чисел. Возможно придется управляющее слово вручную задавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 16:28:37 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Превратить в диапазон, дело нескольких минут, это всего лишь умножение и сложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 16:51:21 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Anatoly PodgoretskyПревратить в диапазон, дело нескольких минут, это всего лишь умножение и сложение. Если использовать ГСЧ для криптографии требуется точное соответствие, одинаково работающее на всех компах. При округлении могут быть проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 18:00:51 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Все, проблему решил, но не с 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; Файл по МТ прилагаю (по крайней мере попытаюсь:), если что ищите в нете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 18:01:03 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
И вот у меня по этой теме след вопрос назрел. Может кто просветит. В разных источниках рекомендуют в create применить randomize, а потом в теле проги применять рандом. randomize задает случайное смещение по периоду - точку отсчета так сказать, и потом уже рандом от этой точки начинает брать из последовательности значения. Но ведь если связку randomize и random применять вместе в теле проги то тогда по идее последовательности не будет, а значения будут браться в хаотичном порядке из всего периода. Вот и вопрос, почему учебники советуют в create применить randomize, а не в связке в проге? Они наверное что-то знают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2011, 09:35:29 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
barleksИ вот у меня по этой теме след вопрос назрел. Может кто просветит. В разных источниках рекомендуют в create применить randomize, а потом в теле проги применять рандом. randomize задает случайное смещение по периоду - точку отсчета так сказать, и потом уже рандом от этой точки начинает брать из последовательности значения. Но ведь если связку randomize и random применять вместе в теле проги то тогда по идее последовательности не будет, а значения будут браться в хаотичном порядке из всего периода. Вот и вопрос, почему учебники советуют в create применить randomize, а не в связке в проге? Они наверное что-то знают? Ramdomize - это инициализация генератора псп. Делается один раз. Можно при старте программы. ВСЁ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2011, 10:25:52 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Ну вот читаю справочник: "Для того чтобы последовательность ПСЧ начиналась с разных значений при каждом запуске проги используйте процедуру randomize" - это понятно. "randomize устанавливает randseed (начальное значение ГПСЧ) привязываясь ко времени" - тож понятно. Не понятно вот это: "Не вызывайте randomize более одного раза в программе. Это разрушает случайность последовательности ПСЧ" Почему она разрушается? И еще можно ли применить применить рекурсию, т.е. для установки randseed использовать random? п.с. книга "Справочник Delphi" издательство Орейли, "рысь на обложке" - это не реклама. п.с. Я наверное тупые вопросы поднимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2011, 11:01:43 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
barleksИ еще можно ли применить применить рекурсию, т.е. для установки randseed использовать random? В любой рекурсии главное - это условие выхода из неё. Какое условие выхода будет в твоей рекурсии ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2011, 11:07:00 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
barleksНе понятно вот это: "Не вызывайте randomize более одного раза в программе. Это разрушает случайность последовательности ПСЧ" Почему она разрушается? И еще можно ли применить применить рекурсию, т.е. для установки randseed использовать random? Разрушается потому, что главное условие ГСЧ - генерировать равномерно распределенные случайные числа при смене randseed внутри последовательности равномерность нарушается. Рекурсия в данном случае довольно глупое занятие, поскольку для конгруэнтного генератора random и randseed одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2011, 11:13:37 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
Спасибо, растолковали.:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2011, 11:25:06 |
|
||
|
Применение ГПСЧ Isaac.pas
|
|||
|---|---|---|---|
|
#18+
barleksИ вот у меня по этой теме след вопрос назрел. Может кто просветит. В разных источниках рекомендуют в create применить randomize, а потом в теле проги применять рандом. randomize задает случайное смещение по периоду - точку отсчета так сказать, и потом уже рандом от этой точки начинает брать из последовательности значения. Но ведь если связку randomize и random применять вместе в теле проги то тогда по идее последовательности не будет, а значения будут браться в хаотичном порядке из всего периода. Вот и вопрос, почему учебники советуют в create применить randomize, а не в связке в проге? Они наверное что-то знают? Если делать последовательно применять вместе randomize и random, то будет одно и то же число, изредка меняющее. Ты еще предлолижи связку randomSeed и random, тогда даже редко меняться не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2011, 11:59:08 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=37553543&tid=2042122]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
192ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 185ms |
| total: | 438ms |

| 0 / 0 |
