HELP

From
Ianos Gnatiuc (2:469/303.55)
To
Max Alekseyev
Date
2002-10-09T06:41:11Z
Area
RU.ALGORITHMS
Hello Max!

08 Oct 02 14:49, you wrote to me:

 IG>> inline DWORD irand()
 IG>> {
 IG>>     iholdrand *= 214013;
 IG>>     iholdrand += 2531011;
 IG>>     return iholdrand;
 IG>> }

 MA> Где такой irand() используется? В каком-то рантайме или самопальный?

частично свой, константы брал из стандартной библиотечке C, в которой rand возвращает число из [0..7FFF] (m == 0x8000)

нужно было случайное 32 битное число, и остался озадаченным, когда понял, что те же константы подойдут и для чисел больше чем 7FFF.

хотя такая функция не совсем корректно работает, так как одно и тоже число не может появиться 2 раза подряд, поэтому хочется эту функцию на _int64 переселить. :)

 IG>> кстати, кто может объяснить, почему rand не повторяется пока не
 IG>> MA> В Кнута есть такая теорема:
 IG>> пройдет через все возможные 32 битные значения?

 MA> В Кнута есть такая теорема:

 MA> Длина периода линейной конгруэнтной последовательности (т.е.
 MA> последовательности, вида X = (a*X+c) % m) равна m тогда и только
 MA> тогда, когда: 1. НОД(c,m) = 1 (т.е. c и m взаимно просты) 2. b=a-1
 MA> кратно p для всех простых p - делителей m 3. b кратно 4, если m кратно
 MA> 4

понятно... 10x


Ianos

... [WinAmp is not installed]  EMAIL: ssianky[at][hotmail | yahoo].com
--- GoldED+/W32 1.1.4.7
 * Origin: SS Ianky - (373-2) 534966 (2:469/303.55)