C++ Случайное число от 1 до очень большого числа (например, 25 миллионов)

Как бы вы сделали функцию, которая генерирует случайное число от 1 до 25 миллионов?

Я думал об использовании rand() но я прав, думая, что максимальное количество, RAND_MAX это = 32000 (там о)?

Есть ли способ обойти это, способ, который не уменьшает вероятность выбора очень низких чисел и не увеличивает вероятность выбора больших / средних чисел?

Редактировать: метод @Jamey D работал совершенно независимо от Qt.

2 ответа

Решение

Вы могли (должны) использовать новый C++11 std::uniform_real_distribution

#include <random>

std::random_device rd;
std::mt19937 gen(rd());

std::uniform_real_distribution<> distribution(1, 25000000);

//generating a random integer:
double random = distribution(gen);

Посмотрите на ran3

http://www.codeforge.com/read/33054/ran3.cpp__html

Вы должны быть в состоянии получить то, что вы хотите от него.

Ran3 (по крайней мере, когда я еще занимался компьютерным моделированием) быстрее, чем rand() с более равномерным распределением, хотя это было несколько лет назад. Возвращает случайное целочисленное значение.

Например, получить исходный код по ссылке выше:

int main() {
   srand(time(null));

   int randomNumber = ran3(rand()) % 25000000;
   int nextRandomNumber = ran3(randomNumber);
}
Другие вопросы по тегам