Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.152.241] |
|
Сообщ.
#1
,
|
|
|
На Делфи не пишу. Сделал эмулятор ГСЧ этого языка. В сети нашёл вывод первых 4-х чисел для проверки со своим ГСЧ:
Цитата То есть инициализация ГПСЧ нулем и вывод 4 последовательных результатов. По ним мы и будем определять что перед нами. Delphi: - 0, 134775813(0x8088405), 3698175006, 870078619 - старый добрый LCRNG из функции RandInt. Мой ГСЧ выдаёт: 1 134775814 3698175007 870078620 т.е. больше на 1. По формуле ГСЧ имеем: nextseed = (oldseed * 134775813 + 1) Mod 2 ^ 32 Для числа на вывод берутся биты 63...32 nextseed * Range Считаем: nextseed = 0 nextseed = (0 * 134775813 + 1) = 1 nextseed = (1 * 134775813 + 1) = 134775814 … т.к. Делфи под рукой нет, не могу проверить, откуда автор статьи из инета взял 0, 134775813, 3698175006, 870078619 ... И ещё вопрос - вызов ф-и Random(Range) (или как она у вас называется) без указания Range в Делфи, как я понял, происходит с Range=4294967296? |
Сообщ.
#2
,
|
|
|
Цитата BlackSun @ И ещё вопрос - вызов ф-и Random(Range) (или как она у вас называется) без указания Range в Делфи, как я понял, происходит с Range=4294967296? Нет. Random без параметра возвратит число в диапазоне [0;1). Прикреплённый файл000389.png (54,12 Кбайт, скачиваний: 397) |
Сообщ.
#3
,
|
|
|
Verevkin, это Делфи 7?
|
Сообщ.
#4
,
|
|
|
Ребята, напишите какая версия Делфи выдаёт последовательность, что показал Verevkin?
|
Сообщ.
#5
,
|
|
|
Нет смысла говорить о последовательности без указания диапазона.
Verevkin привёл для Random(maxint) В свежих версиях: function DefaultRandom32: UInt32; begin Result := UInt32(RandSeed) * $08088405 + 1; RandSeed := Result end; function Random(const ARange: Integer): Integer; var Temp: UInt32; begin Temp := Random32Proc; Result := (UInt64(UInt32(ARange)) * UInt64(Temp)) shr 32; end; |
Сообщ.
#6
,
|
|
|
что имеется ввиду под свежими версиями?
|
Сообщ.
#7
,
|
|
|
Приведённый код из 10.3 Rio
В старых версиях возможности подменить функцию генерации не было, но всегда использовался тот же самый ЛКГ с $08088405 |