Случайное число больше 100 000

Я пишу на C / C ++ и хочу создать много случайных чисел, которые превышают 100 000. Как бы я это сделал? С rand();

5

Решение

// Initialize rand()'s sequence. A typical seed value is the return value of time()
srand(someSeedValue);

//...

long range = 150000; // 100000 + range is the maximum value you allow
long number = 100000 + (rand() * range) / RAND_MAX;

Возможно, вам придется использовать что-то большее, чем long int для range а также number если (100000 + range) будет превышать свое максимальное значение.

2

Другие решения

Вы бы не сделали это с rand, но с правильным генератором случайных чисел, который поставляется с более новым C ++, см., например, cppreference.com.

const int min = 100000;
const int max = 1000000;
std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(min,max);
int random_int = distribution(generator);  // generate random int flat in [min, max]

Не забудьте правильно посеять генератор.

Выше я подразумеваю, что rand не является «правильным» псевдо-ГСЧ, поскольку обычно имеет ряд недостатков. В лучшем случае ему не хватает абстракции, поэтому выбор из другого распределения становится сложным и подверженным ошибкам (например, поиск в сети «модуля случайного диапазона»). Также AFAIK невозможно заменить основной движок, используемый для генерации случайных чисел. В менее оптимальных случаях rand поскольку псевдо-ГСЧ не обеспечивает достаточно длинных последовательностей для многих / большинства случаев использования. С TR1 / C ++ 11 генерировать высококачественные случайные числа достаточно легко, чтобы всегда использовать правильное решение, так что вам не нужно в первую очередь беспокоиться о качестве используемого псевдо-RNG, когда обнаруживаются неясные ошибки. Microsoft STL выступила с презентацией, в которой краткий разговор по теме на GoingNative2013.

15

В общем, вы можете использовать генератор случайных чисел, который идет между 0 и 1, и получить любой диапазон, который вы хотите, выполнив следующее преобразование:

x' = r x + b

Так что если вы хотите случайные числа, скажем, между 100 000 и 300 000, и x ваше случайное число от 0 до 1, то вы бы установить r быть 200 000 и b быть 100 000 и x' будет в пределах диапазона, который вы хотите.

2

Если у вас еще нет доступа к встроенным функциям C ++, в Boost есть куча реальных рандомизаторов в Boost.Random, в том числе конкретные решения для вашего очевидного пространства проблем.

Я бы повторил комментарии о том, что уточнение правок в вашем вопросе улучшит точность ответов, например. «Мне нужны равномерно распределенные целые числа от 100 001 до 1 000 000».

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector