Техника
Как работает RANDOM? почему числа получаются случайными? мы еще в школе в 2000 в qbasic ставили RANDOMISE TIMER какой-то
Для генерации случайных чисел в массиве.
в бейсике и прочих языках программирования обычно зашиты генераторы не случайных, а так называемых псевдослучайных чисел. для получения этих чисел используются детерминированные алгоритмы. так что последовательности будут не случайные, а вполне себе определенные.
например, мультипликативный генератор псевдослучайных чисел имеет простую формулу:
Xₙ = (Xₙ₋₁ * N) mod M
где Xₙ - очередное случайное число, Xₙ₋₁ - случайное число, полученное на предыдущем шаге, N и M - какие-то константы.
если функция, использующая этот генератор, будет возвращать Xₙ/M, и константы подобраны хорошо, никто не заметит, что числа не очень-то случайные.
например, N = 244140625, M = 65536
задаём X₀ = 123 (тот самый RANDOMISE)
получаем Xₙ/M:
0,001876831
0,706710815
0,17326355
0,339035034
0,141525269
0,518234253
0,406661987
0,744308472
0,468673706
0,51725769
0,827560425
0,337081909
0,983322144
а RANDOMISE TIMER просто инициализирует X₀ текущим значением системного таймера. зачем это нужно вызывать явно? например, для отладки. при каждом запуске программы одно и то же начальное значение X₀ будет порождать одну и ту же последовательность - это удобно при отладке алгоритмов, использующих генератор.
а аппаратные генераторы случайных чисел - штуки дорогие, поскольку генерируемые ими последовательности должны быть не какие попало, а удовлетворять всяким разным критериям (равномерности, например).
например, мультипликативный генератор псевдослучайных чисел имеет простую формулу:
Xₙ = (Xₙ₋₁ * N) mod M
где Xₙ - очередное случайное число, Xₙ₋₁ - случайное число, полученное на предыдущем шаге, N и M - какие-то константы.
если функция, использующая этот генератор, будет возвращать Xₙ/M, и константы подобраны хорошо, никто не заметит, что числа не очень-то случайные.
например, N = 244140625, M = 65536
задаём X₀ = 123 (тот самый RANDOMISE)
получаем Xₙ/M:
0,001876831
0,706710815
0,17326355
0,339035034
0,141525269
0,518234253
0,406661987
0,744308472
0,468673706
0,51725769
0,827560425
0,337081909
0,983322144
а RANDOMISE TIMER просто инициализирует X₀ текущим значением системного таймера. зачем это нужно вызывать явно? например, для отладки. при каждом запуске программы одно и то же начальное значение X₀ будет порождать одну и ту же последовательность - это удобно при отладке алгоритмов, использующих генератор.
а аппаратные генераторы случайных чисел - штуки дорогие, поскольку генерируемые ими последовательности должны быть не какие попало, а удовлетворять всяким разным критериям (равномерности, например).
Они не случайные, они ПСЕВДОслучайные. То есть, цикличность их достаточно велика, чтобы не повторяться в пределах данного приложения. И закономерности в их цепочке ЕСТЬ, просто не бросаются в глаза. На самом деле, генерировать действительно случайные числа - задача не примитивная. Лучше всего пока что - оцифровывать шумовые помехи.
Все компьютерные алгоритмы генерации рандома на самом деле его не генерируют. Данные из любого алгоритма генерации ПСЧ рано или поздно повторятся. Для этого нужно аппаратное устройство, например, оцифровывать какой нибудь естественный шум.
Обычно используется цепочка последовательных сдвигов с обратными связями по какому-то условию
Обычно используется цепочка последовательных сдвигов с обратными связями по какому-то условию
Они и не получаются случайными. Это псевдослучайные числа, считаются по формуле, дающей для каждого нового значения число, которое трудно угадать, не зная формулы.
Берётся какой-то источник энтропии (у компа - показания системных часов, например, у МК часто - показания ПАЦ), подставляются в формулу случайного числа (гугли - математические ГСЧ), и получают "случайное" значение.
от грозовых разрядов в атмосфере. несколько вышек по европе. гугли
они на самом деле псевдослучайны, потому что должны выдаваться по какому-то закону...
Похожие вопросы
- Почему не получается собрать унч на 1 транзисторе??
- Не могу понять как работает диод. Почему ток идет в одну сторону и не идет в другую?
- Почему не получается заряжать аккумуляторы быстро за 5 минут скажем?
- А почему спецавтобусы ЛАЗ-692 с защитой от радиоактивной пыли и гамма-излучения ставили на мосты с газоновскими колёсами
- Почему не получается перевести деньги с карточки на карточку?
- Кто знает, Почему не получается бегать по часовой стрелке?
- Почему на высоте 20 км не работает gps? почему он запрещен ?
- Почему так получается, что Япония страна без полезных ископаемых...
- Купил хорошую копию apple iphone 4 у китайцев, всё работает, но почему-то нельзя писать смс на русском. Как исправить это?
- В микровол-ке есть мет. гриль и хромир. проволоч. подставка - не искрят когда работает микр. , почему тарелки искрят?