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)