Рэнд меняет значение без изменения семян

Возьмите следующую программу:

#include <cstdlib>
using std::rand;

#include <iostream>
using std::cout;

int main()
{
    cout << rand() << ' ' << rand() << ' ' << rand() << '\n';
}

Из-за rand производя те же значения, пока семя не изменяется с помощью srand, это должно дать три одинаковых числа.
например

567 567 567

Однако когда я запускаю эту программу, она дает мне три разных значения.
например

6334 18467 41

Когда программа (скомпилирована и) запущена снова, генерируются те же три числа. Я не должен использовать srand чтобы изменить семя, прежде чем я начну получать разные результаты от rand? Это только мой компилятор / реализация пытается сделать мне одолжение?

ОС: Windows XP
Компилятор: GCC 4.6.2
Библиотеки: MinGW

РЕДАКТИРОВАТЬ: пытаясь использовать srandЯ обнаружил, что это результат начального числа 1 (которое, по-моему, установлено по умолчанию).

2 ответа

Решение

Каждый звонок rand() всегда будет генерировать другое случайное число.

Семя фактически определяет последовательность созданных случайных чисел. Использование другого начального числа даст вам еще 3 случайных числа, но вы всегда получите эти 3 числа для данного начального числа.

Если вы хотите иметь один и тот же номер несколько раз, просто позвоните rand() один раз и сохраните его в переменной.

Призвание rand() Несколько раз преднамеренно производит другое случайное число каждый раз, когда вы вызываете его.

Если ваша программа не вызывает srand() с различным значением для каждого прогона, последовательность будет одинаковой для каждого прогона.

Вы могли бы использовать srand() со временем, чтобы сделать всю последовательность другой каждый раз. Вы также можете позвонить srand() с известным значением для сброса последовательности - полезно для тестирования.

Смотрите документацию для rand() и srand().

Другие вопросы по тегам