|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Математика: Генерация псевдослучайных последовательностей.Генераторы случайных чисел, отличные от 'стандарта'.© Nikitine Valeri 2000 Иногда требуется произвести не слишком изысканную последовательных случайных действительных или целых чисел, при этом код генерации случайного числа желательно держать 'в строке' /inline - не оформляя, как вызов отдельной функции/ (для скорости), либо производить выбор для различного возможного числа значащих битов беззнакового целого числа. Ниже приводятся фрагменты программ, осуществляющие подобную генерацию для нормального распределения действительных чисел между 0 и 1 и для целых чисел произвольного диапазона. Генерация случайного действительного числа, равномерно распределенного от 0 до 1 и целого, равномерно распределенного от jlow до jhigh. static unsigned long iran; unsigned long rand_a,rand_c,rand_m; float fran; int jran; ................... /* floating-point fran uniformly from 0 to 1 */ iran=(iran*rand_a+rand_c)%rand_m; fran=(float)iran/(float)rand_m; .................. /* integer jran between jlow and jhigh */ iran=(iran*rand_a+rand_c)%rand_m; jran=jlow+((jhigh-jlow+1)*iran)/im; Ниже приводятся оптимальные значения коэффициентов rand_a, rand_c, rand_m для различного значения числа значащих бит в беззнаковом целом.
Вверх по странице, к оглавлению и навигации.
|