Поддерживаю всё сказанное Raider. В качестве быстрого генератора случайных чисел лучше всего подойдет именно линейный конгруэнтный генератор. В книге "Numerical Recipes" я видел специально подобранные значения констант, которые позволяют несколько упростить вычисление. "Стандартный" генератор использует формулу:
S := (a*S + c) mod m
где S - состояние генератора, которое также возвращается в виде случайного числа после каждой итерации; a, c, m - константы.
то упрощенный генератор позволяет исключить сложение:
S := (a*S) mod m
это требует тщательного подбора констант, в книге приведены значения a=7^5=16807; m=2^31-1 = 2147483647
Для этого требуется 32-битная арифметика, но авторы книги категорически предостерегают от использования генераторов ПСЧ с 16-битным состоянием из-за слишком малого периода повторения.
Линейный конгруэнтный генератор дает числа в диапазоне от 0 до m-1. Чтобы получить другой диапазон, необходимо провести дополнительное умножение на константу. Так, если 0<=x<m, то 0<x*(n/m)<n. Константа n/m будет в общем случае дробной, но дробные вычисления с фиксированной точкой в сущности ничем не отличаются от целочисленных.




Ответить с цитированием