Естественные науки
как работает функция случайных чисел во всех языках программирования? (как ее вызывать писать не надо)
Поучить действительно произвольные числа - весьма непросто. Для этого требуется специальное устройство и программа; это поэтому такой команды в ассемблерах навядли встретишь - это целая подпрограмма вызывается. А ус-во -генератор энтропии - в простых машинах, его роль может выполнять и таймер, и шум снятый с выхода аудиокарты - но по причине простоты таких устройств, несовершенстве алгоритма генерации, полученнные числа называют псевдослучайными - не исключена возможность повторяемости, коллизий и т. п. http://habrahabr.ru/post/132217/
обычно в стандартных библиотеках используется линейный конгруентный датчик.
типа:
operator unsigned long () {
return lastVal = 3141592621UL*lastVal + 907633385ul;
}
lastVal сначала инициализируется отдельной функцией. Константы могут быть разные, но на них наложена куча ограничений (можно почитать в Кнуте), так что лучше использовать готовые.
Датчик плохонький, особенно, если брать его младшие знаки, зато быстрый.
типа:
operator unsigned long () {
return lastVal = 3141592621UL*lastVal + 907633385ul;
}
lastVal сначала инициализируется отдельной функцией. Константы могут быть разные, но на них наложена куча ограничений (можно почитать в Кнуте), так что лучше использовать готовые.
Датчик плохонький, особенно, если брать его младшие знаки, зато быстрый.
в ассемблере ее нет, других языков не знаю.
Татьяна Мартынова
как вы выучили ассемблер?
Там вырабатываются не случайные, а псевдослучайные числа. Например, можно возводить предыдущее число в квадрат и брать из результат средние цифры. Но обычно используется линейный когруэнтный метод, дающий более равномерное распределение чисел: предыдущее число умножается на какой-то множитель и добавляется константа, после чего результат обрубается сверху до заданного числа разрядов. Множитель и константа выбираются исходя из определенных математических соотношений, теория изложена у Кнута в третьем томе.
в языке Ассемблер таковой нет-её пишут отдельно, в других это функция RND -в разных языках она работает по разному
в Бейсике MSX к примеру, данная функция за определенный промежуток времени опрашивает системный таймер, копирует число от 0 до 1 и все, ты просто его умножаешь на сто, делишь на что то другое чтобы получить нужный диапазон
в Паскале почти тоже самое с Фортраном
в Бейсике MSX к примеру, данная функция за определенный промежуток времени опрашивает системный таймер, копирует число от 0 до 1 и все, ты просто его умножаешь на сто, делишь на что то другое чтобы получить нужный диапазон
в Паскале почти тоже самое с Фортраном
В низкоуровневых языках ГСЧ работают обычно на шумах. Ну, или пресловутый конгруэнтный метод (хотя, как показывает практика моделирования методом Монте-Карло, конгруэнтный генератор выдает псевдослучайные числа с приличной корреляцией, и поэтому лично я ЛКМ не доверяю).
Высокоуровневые языки обычно своего ГСЧ не имеют, а юзают соответствующие функции ОСи, например, АПИ.
Высокоуровневые языки обычно своего ГСЧ не имеют, а юзают соответствующие функции ОСи, например, АПИ.
Ради прикола:
ru.cppreference.com/w/cpp/numeric/random
"Случайное число двигателей" - это random number engines, если в ссылке ru на en заменить. Вот так, по-виимому, и работают: -)
В самых общих чертах есть две задачи: инициализация ГСЧ (долгая) и генерация псевдослучайной последовательности (пошустрее). Обе можно рассматривать подробно. Если есть хорошая хэш-функция и пачка любого псевдослучайного мусора с хорошей энтропией для инициализации, то обе неплохо решаются.
ru.cppreference.com/w/cpp/numeric/random
"Случайное число двигателей" - это random number engines, если в ссылке ru на en заменить. Вот так, по-виимому, и работают: -)
В самых общих чертах есть две задачи: инициализация ГСЧ (долгая) и генерация псевдослучайной последовательности (пошустрее). Обе можно рассматривать подробно. Если есть хорошая хэш-функция и пачка любого псевдослучайного мусора с хорошей энтропией для инициализации, то обе неплохо решаются.
Используется либо таймер либо тактовый счетчик
Татьяна Мартынова
получается числа не случайные?
Похожие вопросы
- Может ли человек сгенерировать такую последовательность случайных чисел, что компьютер не заметит никакой закономерности?
- помогите понять как компьютер научили распознавать языки программирования
- Кто придумал генератор случайных чисел? Когда?
- Выбор языка программирования для создания ПО к прибору.
- языки программирования как они работают?? ка компьютер их распознает Спасибо
- андрей загадывает два случайных числа от 1 до 9 каждое. найдите вероятность того что сумма этих чисел делится на 4
- Хочу выучиться какому-нибудь языку программирования?
- эксперименты принстонского университета с генераторами случайных чисел. в россии или ссср проводились подобные работы?
- Каков принцип работы генератора случайных чисел?
- Если все процессы можно описать с помощью математики, то не возникает ли парадокса в отношении генератора случайных чисел