Функция генерации случайных последовательностей

У кого какие идеи по этому вопросу, рулит ли апишная функция ? ) У меня сейчас жесткая функция генерации случайных последовательностей: //Типа счетчик static _uqword dummy; ////////////////////////////////////////////////////////////////////////// //Установить начало рандома void __fastcall r_seed(const _uqword val) { dummy = val; } ////////////////////////////////////////////////////////////////////////// /* L'Ecuyer algorithm for uniform random generator with practically endless period. Combining 2 sequences. previous constants, static variables and functions are valid as if the programs on this page are determined in one module */ IM1 2147483563 IM2 2147483399 AM (1.0f / IM1) IMM1 (IM1 - 1) IA1 40014 IA2 40692 IQ1 53668 IQ2 52774 IR1 12211 IR2 3791 NTAB 32 NDIV (1 + IMM1 / NTAB) NWUP 8 EPS 1.2e-7f RNMX (1.0f - EPS) static _qword dummy2(123456789); static _qword iy(0); static _qword iv[NTAB]; ////////////////////////////////////////////////////////////////////////// _float __fastcall r_f1() { _dword j; _uqword k; _float temp; //initialize the random sequence //(first set of coefficients, //the routine close to that in the function above) if ( !iy ) { if ( dummy == 0 ) { dummy = 1; } dummy2 = dummy; //after NWUP warmups, initialize shuffle table for(j = NTAB + NWUP - 1; j >= 0; --j) { k = dummy / IQ1; if ( (dummy = IA1 * (dummy - k * IQ1) - IR1 * k) RNMX ) return (RNMX); else return temp; }
Последняя правка: пн, 29/08/2011 - 22:00
Submitted by Relyer on

Комментарии

Submitted by Fantik on

Код в студию ), заодно протестим кодепаст чёта он пока вялый какой-то, багов тьма )

Submitted by Relyer on

Кода в природе уже не существует, во всяком случае у меня :(. Писалось лет 8 назад в качестве лабы еще на борланд си 3-м. Вообще борланд заявлял что в своих продуктах аля дельфи и билдера уних "нормальное распределение" у рандома. но не проверял... под винду не писал уже очень давно. последнее время все как то больше под gcc...

кстати. еще немного офтопа. под тотже 3-й си++ борланда. они говорили что не стоит использовать тип register для переменных, т.к. и так все оптимизируется и только попортите производительность. пробовал в свое время экспериментировать, и вправду - производительность падает если переменные насильно сам в регистры засовываеш.

Submitted by Fantik on
Ну просто есть ешо 1н код рандома, используемый в 3-ем кваке //==============================================================int Q_rand( int *seed ) { *seed = (69069 * *seed + 1); return *seed;

}

float Q_random( int *seed ) { return ( Q_rand( seed ) & 0xffff ) / (float)0x10000;

}

float Q_crandom( int *seed ) { return 2.0 * ( Q_random( seed ) - 0.5 );}

Нащет равномерности ХЗ )

Submitted by Relyer on
math.randomseed(os.time()) bsv_k = 100 bsv_aux = {} for i = 0, bsv_k - 1 do bsv_aux[i] = math.random(10001) / 10000; end function get_a() local s = math.floor((bsv_k - 1) * (math.random(10001) / 10000)) local res = bsv_aux[s] bsv_aux[s] = math.random(10001) / 10000; return res end function get_val_n01() local a1 = get_a() local a2 = get_a() local res = math.sqrt(-2.0 * math.log(a1)) * math.cos(2 * math.pi * a2) return res end function get_val(m, s) return m + get_val_n01() * s end get_a() - базовая случайная велечина get_val_n01() - N1(0, 1) get_val(m, s) - N1(m, s^2), m - матожидание, s^2 - дисперсия
Submitted by _dm on
2 Fantik: >> Вообще борланд заявлял что в своих продуктах >> аля дельфи и билдера уних "нормальное распределение" у рандома. Нормальное или равномерное?
Submitted by Victor on

равномерное. а типа не одно и тоже? давно в универе учился... не помню. может и попутал.

Submitted by Fantik on

Вот две интересных статьи по теме:

Submitted by Victor on

http://imgs.xkcd.com/comics/random_number.png

Submitted by Victor on

GameDev.by