Рэнд меняет значение без изменения семян
Возьмите следующую программу:
#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()
с известным значением для сброса последовательности - полезно для тестирования.