Может кто-нибудь привести меня туда, где на самом деле говорится о математике, которая лежит в основе этих двух normal_distribution и default_random_engine. Из того, что я понимаю, использует твистер Мерсенна? Если так, то кто-нибудь может направить меня в сторону какого-то онлайн-ресурса, который объясняет, как на самом деле работает этот псевдослучайный алгоритм, если это то, что он использует, потому что я не могу найти много о мерсенном твистере. Кроме того, если число является равномерным, что выводит большинство псевдослучайных алгоритмов, то как нормальное_распределение делает его нормально распределенным? Использует ли он обратное преобразование, Box Muller или Ziggurat? Любая помощь, я был бы очень признателен 🙂
Есть несколько вопросов, о которых вы спрашиваете. Первый касается методов генерации последовательности псевдослучайных чисел, обычно целых чисел. В Википедии есть разумное описание Мерсенн Твистер (MT), а также Линейный конгруэнтный генератор (LCG) оба из которых выполняют эту функцию. Они предназначены для более или менее равномерного распределения целых чисел по всему эффективному диапазону и представляют основные функциональные возможности, необходимые для создания более сложных распределений.
Генерация чисел из других распределений может быть выполнена путем извлечения чисел из одного из методов, которые генерировали равномерно распределенные целочисленные псевдослучайные розыгрыши. Есть несколько способов сделать это:
Если вы ищете конкретные подробности реализации библиотек классов C ++ для Mersenne Twister, вы можете посмотреть на Повысьте исходный код что даст некоторое представление о том, как Boost это делает. AFAIK, стандарт C ++ 11 не определяет, как это должно быть реализовано, только как он должен вести себя. Реализация оставлена на усмотрение разработчиков компилятора, но я был бы удивлен, если бы многие из наиболее распространенных компиляторов использовали что-то кроме реализации Boost (обновление: хотя приведенное ниже наблюдение MSalters является одной из причин, по которой конкретный компилятор будет делать что-то еще). То же самое относится и к Увеличить класс нормального распределения.
Других решений пока нет …