К основному контенту

Генерация случайных чисел в Паскале и C++

При решении задач имитационного моделирования возникает необходимость генерации случайного числа.
Иногда нужно сгенерировать случайное целое число в некотором диапазоне a...b, а иногда случайное действительное число в некотором диапазоне. (Обычно нужно, чтобы вероятностное распределение случайного числа было равномерным.)
В Паскале реализованы оба типа генераторов случайного числа. В C++ - только первый тип.
Для генерации вещественного случайного числа в C++ можно сгенерировать случайное число x в диапазоне 0...RAND_MAX, а затем разделить x на RAND_MAX - получим равномерно распределённое случайное число от 0 до 1.
Пусть задана вероятность p некоторого случайного события. Можно рассмотреть бинарную случайную величину, которая принимает значение 1 с вероятностью p и значение 0 с вероятностью (1-p). Нужно получить реализацию этой случайной величины. Для этого нужно сгенерировать случайное число x с равномерным распределением от 0 до 1, и если x < p, то бинарная случайная величина принимает значение 1, иначе 0.
Если число p мало, то описанный выше метод генерации случайного действительного числа даст неприемлемый результат.
В Паскале такой проблемы не возникает в этом языке программирования есть хороший встроенный генератор случайного действительного числа. А в C++ можно использовать библиотеку BOOST. (См., например, эту страницу.)

Зачем использовать C++ для решения задач имитационного моделирования, если есть Паскаль со встроенным генератором случайного действительного числа? На C++ можно написать параллельную программу, а метод Монте-Карло отлично распараллеливается.

Комментарии