Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как написать простой генератор случайных чисел?

ТехнологииПрограммирование+1
Yehor
  ·   · 23,2 K
старший разработчик в pseven.io  · 15 янв 2022
Очень простым, но при этом до сих пор использующимся алгоритмом генерации псевдослучайной последовательности бит является алгоритм LFSR. Работает он примерно так:
  1. Есть последовательность нескольких битов. Изначально она заполняется неким значением, например, текущим временем.
  2. На выход уходит последний (правый) бит, после чего все остальные биты сдвигаются вправо
  3. На освободившееся слева место ставится результат выполнения XOR двух последних битов (включая тот который ушёл)
  4. Повторяем шаги 2 и 3, пока не получим последовательность нужной длины
Реализация на языке Python может выглядеть примерно так:
def lfsr(seed):
    state = seed
    while True:
        yield state & 1
        newbit = (state ^ (state >> 1)) & 1
        state = (state >> 1) | (newbit << 7)
В данном примере используется внутренний буфер из восьми бит. Получим последовательность из ста псевдослучайных бит, используя "10000001" в качестве начального значения:
import itertools
print("".join(map(str, itertools.islice(lfsr(0b10000001), 100))))
Результат:
1000000110000010100001111000100010011001101010101111111100000001000000110000010100001111000100010011
Что-то осталось непонятно? Спроси в нашей группе в Телеграме!Перейти на t.me/jstsmentor
3 эксперта согласны
Лучший
По образованию физик, работаю программистом  · 1 нояб 2021
Можно вычислять периодическую функцию, например, синус, при большом значении аргумента, и/или проделать над числом множество обратимых операций, таких, как циклический сдвиг, сумма по модулю, исключающее или и т.п., как... Читать далее
1 эксперт согласен
Артём Бойко
подтверждает
15 янв 2022
Да, верно.
все сети хотят всё знать обо мне  · 17 янв 2022
Прочитал тут (на кью) мне вот этот понравился: "Вот например, простейший ГСЧ: X(i) = a * X(i-1) mod m (для любителей Excel A2=ОСТАТ(A1*48271;2147483647)) a=48271 m=2147483647" только не случайных а ПСЕВДОслучайных Читать далее
Ну, и где тут генерация? Или а и m случайные числа? Тогда как их сгенерировать? Человек делит одно явное число на... Читать дальше