Вопрос по random

Очень часто приходится использовать в программировании генерацию случайных чисел.

Возможно этот вопрос покажется нубским и простым, но для меня это очень важно.

Почему генератор случайных чисел называют генератором псевдослучайных чисел? Насколько такие генераторы справедливы? Что такое семя генератора?

Много программирую на VB, изучаю C#, но в этом вопросе плаваю.

3434 показа
1.4K1.4K открытий
41 комментарий

Потому что генератор "настоящих" случайных чисел штука труднодостижимая.

Ответить

Ну так суть как раз в этом. Как это работает, и почему реальный генератор невозможно сделать.

Ответить

1. Генератор всегда генерирует одинаковые последовательности от одного сида, потому что под капотом всегда простенький код типа этого https://ravesli.com/urok-71-generatsiya-sluchajnyh-chisel-funktsii-srand-i-rand/
Каждое следующее число генерится от предыдущего. Семя — это когда ты устанавливаешь это предыдущее число руками. Формулы обычно подбираются так, чтобы примерно получить случайное распределение.
2. Настоящие генераторы случайных чисел нужны только в узких кейсах типа криптографии. В геймдеве они, наоборот, не используются — чтобы можно было сохранить состояние «рандома» вместе с состоянием мира.
В Doom'е пошли ещё дальше и заменили формулы на табличку чисел (см. картинку)
В итоге функция рандома требует 1 сложение и 1 доступ к памяти, что облегчает вычисление, если ты запускаешь программу под 486.
А если ты завязываешь всю игру на него (поведение монстров, анимации, рандомный дамаг), тебе для записи демок достаточно записать только инпут с клавиатуры, при просмотре демки рандом будет вести себя точно так же, как у играющего.

Ответить

потому что он генерирует псевдослучайные величины, ваш капитан. Они очень несправедливы,  сид это число или вектор чисел для генерации, вообще все зависит от того как оно генерируется.

Ответить

а если серьезно, ты блин издеваешься? хоть бы вики открыл для начала
https://en.wikipedia.org/wiki/Pseudorandom_number_generator

Ответить

В компьютере псевдослучайные числа, потому что они вычисляются по формуле и всегда выдают одинаковую последовательность. Было наглядно, когда я 20 лет назад написал программу для курсовой по теории вероятности, и у двух групп были одинаковые "случайные" числа.
В "ZX-Spectrum" хитрые программисты даже использовали генератор псевдослучайных чисел для хранения данных, чтобы уменьшить объем кода. Потому что числа всегда были одни и те же.
В простейшем случае можно добавить лишний фактор - например, пропускать количество псевдослучайных чисел, равное количеству секунд в момент генерации.
В качестве генератора реально случайных чисел иногда предлагают датчик радиации.
В "Крипто Про" биологический датчик случайных чисел - человек должен возюкать мышкой и долбить по клавиатуре, вряд ли кто-то сможет повторить один в один.

Ответить

  по теории вероятности по теории вероятностей

Ответить