Нужно на интервале от 1...20 равномерно генерировать случ. величину. Я так понимаю функция random(20) +1 , не даст равномерного распределения ? Или я ошибаюсь?? Если да то как можно свести в более равномерном расп. чем у radom() ?? Собственно задание на уровни курсака.
Теоретически функция random() даёт равномерное распределение. На практике, это зависит от того как эта функция "сделана" компилятором. Многие компиляторы используют LCG: http://en.wikipedia.org/wiki/Linear_congruential_generator Но LCG не проходит, так называемые Diehard Tests - тесты, по которым определяют качество генерации случайных чисел: http://en.wikipedia.org/wiki/Diehard_tests Есть более качественные генераторы, которые проходят все Diehard тесты: http://en.wikipedia.org/wiki/Mersenne_twister http://en.wikipedia.org/wiki/Xorshift
Код (Text): .686p .MMX .XMM .model flat, stdcall option casemap :none ; регистрозависимы .code rdtsc ;eax-результат ret Кто-нибудь проверял равномерное распределение?
У программного RNG или rdtsc? У RNG - да. У rdtsc оно ни разу не равномерно ни теоретически, ни практически, и даже проверять не имеет смысла.
AsmGuru62 XorShift не проходит Diehard тесты, об этом сказано в статье Marsaglia, где он и предложен (http://www.jstatsoft.org/v08/i14/paper) Более подробный анализ статистистических проблем XorShift'а есть в http://www.iro.umontreal.ca/~lecuyer/myftp/papers/xorshift.pdf
Maratyszcza Из первого документа следует, что не все генераторы такого типа проходят все тесты, но приведены и те, которые действительно проходят. Неплохой документ.