Я пытаюсь написать функцию, которая принимает мин и макс и возвращает случайный дубль между ними. Я пытался использовать Boost :: variate_generator, чтобы получить случайное число между двумя двойными числами, но проблема в том, что я не могу изменить его распределение, поэтому мне пришлось бы создавать новое начальное число при каждом вызове. Он побеждает назначение генератора псевдослучайных чисел, если я создаю новое начальное число каждый раз, когда я его вызываю.
Есть ли способ получить что-то подобное ниже, Boost не нужен, просто он дает хорошие результаты.
double getRandom(double min, double max);
{
return randomNumberBetweenMinAndMax;
}
Есть много способов сделать это. У вас может быть аргумент с параметром по умолчанию, который по умолчанию равен некоторому глобально доступному объекту. Вы можете иметь статическую переменную локальной области действия, в которой хранится генератор. Вы можете иметь статическую переменную области видимости файла (похожую на статическую класс, если бы она была в классе), в которой хранится генератор. Вы можете иметь одноэлементный генератор, который получает функция.
Я неравнодушен к параметрам по умолчанию с глобально доступным объектом по умолчанию. Как правило, он безопасен для потоков, поскольку генератор является потокобезопасным, и вы инициализируете его до создания потоков.
Других решений пока нет …