2017-02-11 3 views
4

Я работаю над назначением C++ для своего класса, и мы должны использовать rand() с семенем 99 для создания набора значений. Однако моя проблема заключается в том, что когда я пытаюсь создать значение в наших параметрах, число отличается от того, что инструктор предоставил нам для определенного первого номера. Код показан ниже:C++ rand() не дает правильного числа на основе семени

int lottoNumber; 
    srand (RANDOM_NUMBER_SEED); 
    do 
    { 
    lottoNumber = rand(); 
    } while (lottoNumber > 25 || lottoNumber < 1); 

    cout << lottoNumber << endl; 

Значения, возвращаемые из этого 13, в то время как число, как ожидается, будет произведено равно 2. Любая помощь, почему это отличается было бы здорово, спасибо!

+0

Возможно, вы полностью избавитесь от цикла и просто используйте 'lottoNumber = rand()% 25 + 1;'. Он может быть не совсем распределен, но он должен делать что угодно, кроме лотереи * реального *, но если бы это была настоящая лотерея, я подозреваю, что правительственные постановления потребуют чего-то лучшего, чем PRNG :-) – paxdiablo

ответ

9

Алгоритм, используемый rand(), определяется реализацией.

Это означает, что он может отличаться от разных компиляторов и версий компилятора.

3

rand() зависит от реализации, от cppreference.com std::rand:

Там нет никаких гарантий, как к качеству случайной последовательности производства.

Вы можете использовать что-то больше похоже на станд :: mt19937

4

Ваш инструктор галлюцинация. Это псевдо-случайный генератор чисел. Просто потому, что свойства такого генератора имеют тенденцию давать одинаковые результаты при одном и том же семени при любом конкретном вызове программы, не означает, что это поведение каким-либо образом гарантировано или что такое свойство следует ожидать применять в целом навсегда.

Если вы хотите детерминированную последовательность, не используйте генератор случайных чисел !!!

+0

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

+0

@NeilButterworth: OP обнаружил, по сути, и совершенно справедливо, что это _not_ true. –

+0

Детерминированный! = Все реализации дают одинаковые результаты –