История изменений
Исправление Psilocybe, (текущая версия) :
Чтобы было равномерное, надо писать что-то вроде $(((RANDOM * 32768 + RANDOM) % 65536))
Нет. Максимальное 16-разрядное простое число это 65521.
Чтобы было равномерно надо писать (a*x+b)%65521
Такой генератор будет пробегать весь диапазон от 0 до 65521 за исключением решения уравнения (a*x+b)%65521=x
. Тут и старший бит будет распределен как надо. Коэффициент a следует выбрать примерно 1/3 от 65521.
Если число не простое, то циклов, по которым бегает генератор будет столько же сколько простых множителей. У используемого числа 32767 (1, 7, 31, 151, 32767 ) будет 5 циклов, один из которых тривиальный, являющийся решением уравнения. В зависимости от начального значения мы попадает в одни из циклов и бегаем по нему. Отсюда и проблемы с качеством генерации.
Исправление Psilocybe, :
Чтобы было равномерное, надо писать что-то вроде $(((RANDOM * 32768 + RANDOM) % 65536))
Нет. Максимальное 16-разрядное простое число это 65521.
Чтобы было равномерно надо писать (a*x+b)%65521
Такой генератор будет пробегать весь диапазон от 0 до 65521 за исключением решения уравнения (a*x+b)%65521=x
. Тут и старший бит будет распределен как надо. Коэффициент a следует выбрать примерно 1/6 от 65521.
Если число не простое, то циклов, по которым бегает генератор будет столько же сколько простых множителей. У используемого числа 32767 (1, 7, 31, 151, 32767 ) будет 5 циклов, один из которых тривиальный, являющийся решением уравнения. В зависимости от начального значения мы попадает в одни из циклов и бегаем по нему. Отсюда и проблемы с качеством генерации.
Исходная версия Psilocybe, :
Чтобы было равномерное, надо писать что-то вроде $(((RANDOM * 32768 + RANDOM) % 65536))
Нет. Максимальное 16-разрядное простое число это 65521.
Чтобы было равномерно надо писать (a*x+b)%65521
Такой генератор будет пробегать весь диапазон от 0 до 65521 за исключением решения уравнения (a*x+b)%65521=0
. Тут и старший бит будет распределен как надо. Коэффициент a следует выбрать примерно 1/6 от 65521.
Если число не простое, то циклов, по которым бегает генератор будет столько же сколько простых множителей. У используемого числа 32767 (1, 7, 31, 151, 32767 ) будет 5 циклов, один из которых тривиальный, являющийся решением уравнения. В зависимости от начального значения мы попадает в одни из циклов и бегаем по нему. Отсюда и проблемы с качеством генерации.